直接上实例,写到 千亿上了。
php" id="highlighter_648343">
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
|
/**
* @author ja颂
* @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);
|
以上所述就是本文的全部内容了,希望大家能够喜欢。