/**
* 数字转化中文,例如,输入1234567 则输出一百二十三万四千五百六十七
*
* @param string $num
*
* @return string
*/
function int2chinese(string $num): string
{
$a = ['零', '一', '二', '三', '四','五', '六', '七', '八', '九'];
$b = ['', '十', '百', '千'];
$c = ['万', '亿'];
$num = sp_round($num, 2); // 四舍五入 保留两位小数
$num = strrev($num); // 反转字符串
$z = [];
if ($e = strpos($num, '.')) {
list($float, $int) = explode('.', $num);
$z[] = [$float[0], $a[$float[0]], '', '', ''];
if ($e == 2) {
$z[] = [$float[1], $a[$float[1]], '', '', ''];
}
$z[] = ['.', '点', '', '', ''];
} else {
$int = $num;
}
$len = strlen($int); // 字符串长度
$z[] = [$int[0], $a[$int[0]], '', '', ''];
for ($i = 1; $i < $len; ++$i) {
$f = '';
if (($mod = $i % 4) == 0) {
$g = intdiv($i, 4);
$f .= $g % 2 ? $c[0] : ''; // 万
$f .= str_repeat($c[1], intdiv($g, 2)); // 亿
}
$z[] = [
$int[$i], // 所在位数字
$a[$int[$i]], // 中文数字
$b[$mod], // 十百千
$f, // 万亿
$mod, // 位数取模4
];
}
$len = count($z);
$g = true;
$s = '';
for ($i = $len - 1; $i > -1; --$i) {
if ($z[$i][0]) {
$g = true;
$s .= $z[$i][1] . $z[$i][2];
} else {
if ($g) {
$s .= $z[$i][1];
$g = false;
}
}
$s .= $z[$i][3];
if (!$z[$i][4]) $g = true;
}
return strtr($s, ['零万' => '万', '零亿' => '亿']);
}
v(int2chinese('10000304.05'));
v(int2chinese('10020304.05'));
结果: