当前位置:首页 > PHP教程 > php应用 > 列表

php 把数字转换成汉字的代码

发布:smiling 来源: PHP粉丝网  添加日期:2021-06-13 22:13:28 浏览: 评论:0 

在一次面试中遇到一个有意思的小算法题:要求将阿拉伯数字转为汉字显示出来(包含单位)。当时虽然实现出来,但是代码写的有点凌乱。所以回家后,重新整理了一下。

直接上实例,写到 千亿上了。

  1. /** 
  2.  
  3. * @author ja颂  
  4. * 把数字1-1亿换成汉字表述,如:123->一百二十三 
  5. * @param [num] $num [数字] 
  6. * @return [string] [string] 
  7. */ 
  8. function numToWord($num) 
  9. { 
  10. $chiNum = array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九'); 
  11. $chiUni = array('','十', '百', '千', '万', '亿', '十', '百', '千'); 
  12.  
  13. $chiStr = ''; 
  14.  
  15. $num_str = (string)$num; 
  16.  
  17. $count = strlen($num_str); 
  18. $last_flag = true; //上一个 是否为0 
  19. $zero_flag = true; //是否第一个 
  20. $temp_num = null; //临时数字 
  21.  
  22. $chiStr = '';//拼接结果 
  23. if ($count == 2) {//两位数 
  24. $temp_num = $num_str[0]; 
  25. $chiStr = $temp_num == 1 ? $chiUni[1] : $chiNum[$temp_num].$chiUni[1]; 
  26. $temp_num = $num_str[1]; 
  27. $chiStr .= $temp_num == 0 ? '' : $chiNum[$temp_num];  
  28. }else if($count > 2){ 
  29. $index = 0; 
  30. for ($i=$count-1; $i >= 0 ; $i--) {  
  31. $temp_num = $num_str[$i]; 
  32. if ($temp_num == 0) { 
  33. if (!$zero_flag && !$last_flag ) { 
  34. $chiStr = $chiNum[$temp_num]. $chiStr; 
  35. $last_flag = true; 
  36. } 
  37. }else{ 
  38. $chiStr = $chiNum[$temp_num].$chiUni[$index%9] .$chiStr; 
  39.  
  40. $zero_flag = false; 
  41. $last_flag = false; 
  42. } 
  43. $index ++; 
  44. } 
  45. }else{ 
  46. $chiStr = $chiNum[$num_str[0]];  
  47. } 
  48. return $chiStr; 
  49. } 
  50.  
  51. $num = 150; 
  52. echo numToWord($num); 

方法二:

  1. <?php 
  2.  /** 
  3. * 数字转换为中文 
  4. * @param  string|integer|float  $num  目标数字 
  5. * @param  integer $mode 模式[true:金额(默认),false:普通数字表示] 
  6. * @param  boolean $sim 使用小写(默认) 
  7. * @return string 
  8. */ 
  9.  function number2chinese($num,$mode = true,$sim = true){ 
  10.     if(!is_numeric($num)) return '含有非数字非小数点字符!'; 
  11.     $char    = $sim ? array('零','一','二','三','四','五','六','七','八','九') 
  12.     : array('零','壹','贰','叁','肆','伍','陆','柒','捌','玖'); 
  13.     $unit    = $sim ? array('','十','百','千','','万','亿','兆') 
  14.     : array('','拾','佰','仟','','萬','億','兆'); 
  15.     $retval  = $mode ? '元':'点'; 
  16.     //小数部分 
  17.     if(strpos($num, '.')){ 
  18.         list($num,$dec) = explode('.', $num); 
  19.         $dec = strval(round($dec,2)); 
  20.         if($mode){ 
  21.             $retval .= "{$char[$dec['0']]}角{$char[$dec['1']]}分"; 
  22.         }else{ 
  23.             for($i = 0,$c = strlen($dec);$i < $c;$i++) { 
  24.                 $retval .= $char[$dec[$i]]; 
  25.             } 
  26.         } 
  27.     } 
  28.     //整数部分 
  29.     $str = $mode ? strrev(intval($num)) : strrev($num); 
  30.     for($i = 0,$c = strlen($str);$i < $c;$i++) { 
  31.         $out[$i] = $char[$str[$i]]; 
  32.         if($mode){ 
  33.             $out[$i] .= $str[$i] != '0'? $unit[$i%4] : ''; 
  34.                 if($i>1 and $str[$i]+$str[$i-1] == 0){ 
  35.                 $out[$i] = ''; 
  36.             } 
  37.                 if($i%4 == 0){ 
  38.                 $out[$i] .= $unit[4+floor($i/4)]; 
  39.             } 
  40.         } 
  41.     } 
  42.     $retval = join('',array_reverse($out)) . $retval; 
  43.     return $retval; 
  44.  } 
  45.  //实例调用===================================================== 
  46. $num = '0123648867.789'; 
  47. echo $num,'<br>'; 
  48.  //普通数字的汉字表示 
  49. echo '普通:',number2chinese($num,false),''; 
  50. echo '<br>'; 
  51.  //金额汉字表示 
  52. echo '金额(简体):',number2chinese($num,true),''; 
  53. echo '<br>'; 
  54. echo '金额(繁体):',number2chinese($num,true,false); 

以上所述就是本文的全部内容了,希望大家能够喜欢。

Tags: php数字转换成汉字

分享到:

相关文章