function rmbToUpperCase($num) {
$c1 = "零壹贰叁肆伍陆柒捌玖";
$c2 = "分角元拾佰仟万拾佰仟亿拾佰仟";
$num = round($num, 2); // 保留两位小数
$num = $num * 100; // 转换为整数
if (strlen($num) > 10) {
return "数字太大,无法转换!";
}
$i = 0;
$c = "";
while (1) {
if ($i == 0) {
// 获取最后一位数字
$n = substr($num, strlen($num)-1, 1);
} else {
$n = $num % 10;
}
$p1 = substr($c1, 3 * $n, 3);
$p2 = substr($c2, 3 * $i, 3);
if ($n != '0' || ($n == '0' && ($p2 == '亿' || $p2 == '万' || $p2 == '元'))) {
$c = $p1 . $p2 . $c;
} else {
$c = $p1 . $c;
}
$i = $i + 1;
$num = $num / 10;
if ($num < 1) {
break;
}
}
// 替换一些特殊的数字组合
$c = str_replace("零零零零", "零", $c);
$c = str_replace("零零零", "零", $c);
$c = str_replace("零零", "零", $c);
$c = str_replace("拾零", "拾", $c);
$c = str_replace("零拾", "零", $c);
$c = str_replace("零佰", "零", $c);
$c = str_replace("零仟", "零", $c);
$c = str_replace("零万", "万", $c);
$c = str_replace("零亿", "亿", $c);
$c = str_replace("亿万", "亿", $c);
$c = str_replace("零零元", "元", $c);
$c = str_replace("零元", "元", $c);
$c = str_replace("零角", "", $c);
$c = str_replace("零分", "", $c);
$c = str_replace("元零", "元", $c);
if (substr($c, strlen($c)-1, 1) == "元" || substr($c, strlen($c)-1, 1) == "角") {
$c = $c . "整";
}
return $c;
}
// 测试代码
$num = 123456.78;
$result = rmbToUpperCase($num);
echo $result; // 输出:壹拾贰万叁仟肆佰伍拾陆元柒角捌分
php 人民币数字转大写 (待优化)
于 2023-12-15 14:23:14 首次发布