/**
* @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); |