$fmt = new NumberFormatter('zh_CN', NumberFormatter::SPELLOUT);
$fmt->setTextAttribute(NumberFormatter::DEFAULT_RULESET, '%spellout-cardinal-financial');
echo $fmt->format(123456789.123456);
// 壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖点壹贰叁肆伍陆
/**
* 人民币转汉字
* @param number $number
*/
function money_cn($number)
{
return '人民币' . money_yuan($number) . money_jiao_fen($number);
}
/**
* 整数为元
* @param number $number
*/
function money_yuan($number)
{
$fmt = new NumberFormatter('zh_CN', NumberFormatter::SPELLOUT);
$fmt->setTextAttribute(NumberFormatter::DEFAULT_RULESET, '%spellout-cardinal-financial');
$yuan = (int) $number;
return $fmt->format($yuan) . '元';
}
/**
* 参数为小数, 0.12 1角2分
* 无视整数
* @param number $number
*/
function money_jiao_fen($number)
{
$fmt = new NumberFormatter('zh_CN', NumberFormatter::PATTERN_RULEBASED, '
0: 整;
1: 零壹分;
2: 零贰分;
3: 零叁分;
4: 零肆分;
5: 零伍分;
6: 零陆分;
7: 零柒分;
8: 零捌分;
9: 零玖分;
10: <%%jiao<>%%fen>;
100: 超出元;
%%jiao:
1: 壹角;
2: 贰角;
3: 叁角;
4: 肆角;
5: 伍角;
6: 陆角;
7: 柒角;
8: 捌角;
9: 玖角;
10: 超出角;
%%fen:
0: ;
1: 壹分;
2: 贰分;
3: 叁分;
4: 肆分;
5: 伍分;
6: 陆分;
7: 柒分;
8: 捌分;
9: 玖分;
10: 超出分;
');
$jf = ($number - (int)$number) * 100;
return $fmt->format($jf);
}
for ($y = 0; $y < 200; $y += 3) {
for ($jf = 0; $jf < 1; $jf += 0.03) {
printf("%5s: %s\n", $money = $y + $jf, money_cn($money));
}
}