1 <?php 2 function numTrmb($num) 3 { 4 $d = array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"); 5 $e = array('元', '拾', '佰', '仟', '万', '拾万', '佰万', '仟万', '亿', '拾亿', '佰亿', '仟亿'); 6 $p = array('分', '角'); 7 $zheng = "整"; 8 $final = array(); 9 $inwan = 0;//是否有万 10 $inyi = 0;//是否有亿 11 $len = 0;//小数点后的长度 12 $y = 0; 13 $num = round($num, 2);//精确到分 14 if (strlen($num) > 15) { 15 return "金额太大"; 16 die(); 17 } 18 if ($c = strpos($num, '.')) {//有小数点,$c为小数点前有几位 19 $len=strlen($num)-strpos($num,'.')-1;//小数点后有几位数 20 }else {//无小数点 21 $c = strlen($num); 22 $zheng = '整'; 23 } 24 for ($i = 0; $i < $c; $i++) { 25 $bit_num = substr($num, $i, 1); 26 if ($bit_num != 0 || substr($num, $i + 1, 1) != 0) { 27 @$low = $low . $d[$bit_num]; 28 } 29 if ($bit_num || $i == $c - 1) { 30 @$low = $low . $e[$c - $i - 1]; 31 } 32 } 33 if($len!=1){ 34 for ($j = $len; $j >= 1; $j--) { 35 $point_num = substr($num, strlen($num) - $j, 1); 36 @$low = $low . $d[$point_num] . $p[$j - 1]; 37 } 38 }else{ 39 $point_num = substr($num, strlen($num) - $len, 1); 40 $low=$low.$d[$point_num].$p[$len]; 41 } 42 $chinses = str_split($low, 3);//字符串转化为数组 43 for ($x = count($chinses) - 1; $x >= 0; $x--) { 44 if ($inwan == 0 && $chinses[$x] == $e[4]) {//过滤重复的万 45 $final[$y++] = $chinses[$x]; 46 $inwan = 1; 47 } 48 if ($inyi == 0 && $chinses[$x] == $e[8]) {//过滤重复的亿 49 $final[$y++] = $chinses[$x]; 50 $inyi = 1; 51 $inwan = 0; 52 } 53 if ($chinses[$x] != $e[4] && $chinses[$x] !== $e[8]) { 54 $final[$y++] = $chinses[$x]; 55 } 56 } 57 $newstr = (array_reverse($final)); 58 $nstr = join($newstr); 59 if ((substr($num, -2, 1) == '0') && (substr($num, -1) <> 0)) { 60 $nstr = substr($nstr, 0, (strlen($nstr) -6)).'零'. substr($nstr, -6, 6); 61 } 62 $nstr=(strpos($nstr,'零角')) ? substr_replace($nstr,"",strpos($nstr,'零角'),6) : $nstr; 63 return $nstr = (substr($nstr,-3,3)=='元') ? $nstr . $zheng : $nstr; 64 } 65 echo numTrmb(556455456156.65);