数字金额转中文繁体大写

好吧,我居然在写这个。

可以到这里测试。(https://sandbox.onlinephpfunctions.com/code/0cc068d3c89904e55d8aa9e55fdfa45eaab70c37)

数字金额转中文繁体大写:

if (!function_exists('rmb_capital')) {
    /**
     * 金额转中文大写
     *
     * @param  mixed  $amount
     * @return string
     */
    function rmb_capital($amount)
    {
        $capitalNumbers = [
            '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖',
        ];

        $integerUnits = ['', '拾', '佰', '仟',];

        $placeUnits = ['', '万', '亿', '兆',];

        $decimalUnits = ['角', '分', '厘', '毫',];

        $result = [];

        $arr = explode('.', $amount);

        $integer = trim($arr[0] ?? '', '-');
        $decimal = $arr[1] ?? '';

        if (!((int) $decimal)) {
            $decimal = '';
        }

        // 转换整数部分
        // 从个位开始

        $integerNumbers = $integer ? array_reverse(str_split($integer)) : [];

        $last = null;
        foreach (array_chunk($integerNumbers, 4) as $chunkKey => $chunk) {
            if (!((int) implode('', $chunk))) {
                // 全是 0 则直接跳过
                continue;
            }

            array_unshift($result, $placeUnits[$chunkKey]);

            foreach ($chunk as $key => $number) {
                // 去除重复 零,以及第一位的 零,类似:1002、110
                if (!$number && (!$last || $key === 0)) {
                    $last = $number;
                    continue;
                }
                $last = $number;

                // 类似 1022,中间的 0 是不需要 佰 的
                if ($number) {
                    array_unshift($result, $integerUnits[$key]);
                }

                array_unshift($result, $capitalNumbers[$number]);
            }
        }

        if (!$result) {
            array_push($result, $capitalNumbers[0]);
        }

        array_push($result, '圆');

        if (!$decimal) {
            array_push($result, '整');
        }

        // 转换小数位
        $decimalNumbers = $decimal ? str_split($decimal) : [];
        foreach ($decimalNumbers as $key => $number) {
            array_push($result, $capitalNumbers[$number]);
            array_push($result, $decimalUnits[$key]);
        }

        if (strpos((string) $amount, '-') === 0) {
            array_unshift($result, '负');
        }

        return '人民币' . implode('', $result);
    }
}

函数不对参数是否为数字值做验证

简单测试了一下:

:人民币零圆整

dsfa:人民币零圆整

0:人民币零圆整

1:人民币壹圆整

12:人民币壹拾贰圆整

10:人民币壹拾圆整

102:人民币壹佰零贰圆整

110:人民币壹佰壹拾圆整

1002:人民币壹仟零贰圆整

1010:人民币壹仟零壹拾圆整

1022:人民币壹仟零贰拾贰圆整

100002:人民币壹拾万零贰圆整

1020345:人民币壹佰零贰万零叁佰肆拾伍圆整

100:人民币壹佰圆整

10000:人民币壹万圆整

-22342.432:人民币负贰万贰仟叁佰肆拾贰圆肆角叁分贰厘

0.34:人民币零圆叁角肆分

34.04:人民币叁拾肆圆零角肆分

34532:人民币叁万肆仟伍佰叁拾贰圆整

123456789:人民币壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖圆整

推荐学习:《PHP视频教程

以上就是PHP实现数字金额轻松转成中文繁体大写(实际测试)的详细内容,更多请关注亿码酷站其它相关文章!


<!–亿码酷站直播班–>PHP实现数字金额轻松转成中文繁体大写(实际测试)
—–文章转载自PHP中文网如有侵权请联系ymkuzhan@126.com删除

下载声明:
  • 本站资源如无特殊说明默认解压密码为www.ymkuzhan.com建议使用WinRAR解压;
  • 本站资源来源于用户分享、互换、购买以及网络收集等渠道,本站不提供任何技术服务及有偿服务,资源仅提供给大家学习研究请勿作它用。
  • 赞助本站仅为维持服务器日常运行并非购买程序及源码费用因此不提供任何技术支持,如果你喜欢该程序,请购买正版!
  • 版权声明:
  • 下载本站资源学习研究的默认同意本站【版权声明】若本站提供的资源侵犯到你的权益,请提交版权证明文件至邮箱ymkuzhan#126.com(将#替换为@)站长将会在三个工作日内为您删除。
  • 免责声明:
  • 您好,本站所有资源(包括但不限于:源码、素材、工具、字体、图像、模板等)均为用户分享、互换、购买以及网络收集而来,并未取得原始权利人授权,因此禁止一切商用行为,仅可用于个人研究学习使用。请务必于下载后24小时内彻底删除,一切因下载人使用所引起的法律相关责任,包括但不限于:侵权,索赔,法律责任,刑事责任等相关责任,全部由下载人/使用人,全部承担。以上说明,一经发布视为您已全部阅读,理解、同意以上内容,如对以上内容持有异议,请勿下载,谢谢配合!支持正版,人人有责,如不慎对您的合法权益构成侵犯,请联系我们对相应内容进行删除,谢谢!