如何把数字转换成汉字

/**
  
* @author ja颂 
* 把数字1-1亿换成汉字表述,如:123->一百二十三
* @param [num] $num [数字]
* @return [string] [string]
*/
function  numToWord( $num )
{
$chiNum  array ( '零' '一' '二' '三' '四' '五' '六' '七' '八' '九' );
$chiUni  array ( '' , '十' '百' '千' '万' '亿' '十' '百' '千' );
  
$chiStr  '' ;
  
$num_str  = (string) $num ;
  
$count  strlen ( $num_str );
$last_flag  = true;  //上一个 是否为0
$zero_flag  = true;  //是否第一个
$temp_num  = null;  //临时数字
  
$chiStr  '' ; //拼接结果
if  ( $count  == 2) { //两位数
$temp_num  $num_str [0];
$chiStr  $temp_num  == 1 ?  $chiUni [1] :  $chiNum [ $temp_num ]. $chiUni [1];
$temp_num  $num_str [1];
$chiStr  .=  $temp_num  == 0 ?  ''  $chiNum [ $temp_num ]; 
} else  if ( $count  > 2){
$index  = 0;
for  ( $i = $count -1;  $i  >= 0 ;  $i --) { 
$temp_num  $num_str [ $i ];
if  ( $temp_num  == 0) {
if  (! $zero_flag  && ! $last_flag  ) {
$chiStr  $chiNum [ $temp_num ].  $chiStr ;
$last_flag  = true;
}
} else {
$chiStr  $chiNum [ $temp_num ]. $chiUni [ $index %9] . $chiStr ;
  
$zero_flag  = false;
$last_flag  = false;
}
$index  ++;
}
} else {
$chiStr  $chiNum [ $num_str [0]]; 
}
return  $chiStr ;
}
  
$num  = 150;
echo  numToWord( $num );

方法二:

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值