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

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

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

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

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

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

分享到:

相关文章