01 | /** |
02 | *数字金额转换成中文大写金额的函数 |
03 | *String Int $num 要转换的小写数字或小写字符串 |
04 | *return 大写字母 |
05 | *小数位为两位 |
06 | **/ |
07 | function num_to_rmb( $num ){ |
08 | $c1 = "零壹贰叁肆伍陆柒捌玖" ; |
09 | $c2 = "分角元拾佰仟万拾佰仟亿" ; |
10 | //精确到分后面就不要了,所以只留两个小数位 |
11 | $num = round ( $num , 2); |
12 | //将数字转化为整数 |
13 | $num = $num * 100; |
14 | if ( strlen ( $num ) > 10) { |
15 | return "金额太大,请检查" ; |
16 | } |
17 | $i = 0; |
18 | $c = "" ; |
19 | while (1) { |
20 | if ( $i == 0) { |
21 | //获取最后一位数字 |
22 | $n = substr ( $num , strlen ( $num )-1, 1); |
23 | } else { |
24 | $n = $num % 10; |
25 | } |
26 | //每次将最后一位数字转化为中文 |
27 | $p1 = substr ( $c1 , 3 * $n , 3); |
28 | $p2 = substr ( $c2 , 3 * $i , 3); |
29 | if ( $n != '0' || ( $n == '0' && ( $p2 == '亿' || $p2 == '万' || $p2 == '元' ))) { |
30 | $c = $p1 . $p2 . $c ; |
31 | } else { |
32 | $c = $p1 . $c ; |
33 | } |
34 | $i = $i + 1; |
35 | //去掉数字最后一位了 |
36 | $num = $num / 10; |
37 | $num = (int) $num ; |
38 | //结束循环 |
39 | if ( $num == 0) { |
40 | break ; |
41 | } |
42 | } |
43 | $j = 0; |
44 | $slen = strlen ( $c ); |
45 | while ( $j < $slen ) { |
46 | //utf8一个汉字相当3个字符 |
47 | $m = substr ( $c , $j , 6); |
48 | //处理数字中很多0的情况,每次循环去掉一个汉字“零” |
49 | if ( $m == '零元' || $m == '零万' || $m == '零亿' || $m == '零零' ) { |
50 | $left = substr ( $c , 0, $j ); |
51 | $right = substr ( $c , $j + 3); |
52 | $c = $left . $right ; |
53 | $j = $j -3; |
54 | $slen = $slen -3; |
55 | } |
56 | $j = $j + 3; |
57 | } |
58 | //这个是为了去掉类似23.0中最后一个“零”字 |
59 | if ( substr ( $c , strlen ( $c )-3, 3) == '零' ) { |
60 | $c = substr ( $c , 0, strlen ( $c )-3); |
61 | } |
62 | //将处理的汉字加上“整” |
63 | if ( empty ( $c )) { |
64 | return "零元整" ; |
65 | } else { |
66 | return $c . "整" ; |
67 | } |
68 | } |
69 | echo num_to_rmb(4562845.56); |