数字转人民币大写,PHP实现

2021/11/12 17:12:26

本文主要是介绍数字转人民币大写,PHP实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

/**
 * 获取人民币数字大写
 * @param int|string $num
 * @return string
 */
function get_rmb(int|string $num): string
{
    $str = '';

    $a = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
    $b = ['分', '角', '元', '整'];
    $c = ['', '拾', '佰', '仟'];
    $d = ['万', '亿'];

    // 四舍五入 保留两位小数
    $num = sp_round($num, 2);

    // 反转字符串
    $num = strrev($num);

    // 小数
    if (($point = strpos($num, '.')) !== false) {
        if ($point == 2) {
            $str .= $b[0] . $a[$num[0]] . ($num[1] ? $b[1] : '') . $a[$num[1]]; // 角分
        } else {
            $str .= $b[1] . $a[$num[0]]; // 角
        }
        $num = substr($num, $point + 1);
    } else {
        $str .= $b[3]; // 整
    }

    $str .= $b[2]; // 元

    $is_pass = false; // 是否经过一位非零数字
    $no_zero = true; // 没有零
    $len = strlen($num); // 字符串长度

    // 第一位数字
    if ($num[0]) {
        $is_pass = true;
        $str .= $a[$num[0]];
    }

    // 第一位以后
    for ($i = 1; $i < $len; ++ $i) {

        // 处理万亿
        if (($mod = $i % 4) == 0) {
            $is_pass = false; // 是否经过一位非零数字
            $no_zero = true; // 没有零

            $div = intdiv($i, 4);
            $str .= str_repeat($d[1], intdiv($div, 2)); // 亿
            $str .= $div % 2 ? $d[0] : ''; // 万
        }

        if ($num[$i]) {
            $is_pass = true;
            $str .= $c[$mod] . $a[$num[$i]];
        } else {
            if ($is_pass && $no_zero) {
                $str .= $a[$num[$i]];
                $no_zero = false;
            }
        }
    }

    return mb_strrev($str); // 反转多字节字符串
}


v(get_rmb('1004560007807005.123456'));
v(get_rmb('123456789012304560.99956'));

注:依赖  sp_round函数(对长数字字符串四舍五入)mb_strrev函数(反转多字节字符串),之前文章有

执行结果:



                   

这篇关于数字转人民币大写,PHP实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程