PHP enables easy conversion of numerical amounts into traditional Chinese capital letters (actual test)

藏色散人
Release: 2023-04-10 17:10:02
forward
3642 people have browsed it

# Digital amount to the Chinese Traditional Chinese Polycase

Okay, I am writing this.

You can go here to test. (https://sandbox.onlinephpfunctions.com/code/0cc068d3c89904e55d8aa9e55fdfa45eaab70c37)

Convert numeric amount to Chinese traditional uppercase:

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);
    }
}
Copy after login

The function does not verify whether the parameter is a numeric value

After a brief test:

:人民币零圆整

dsfa:人民币零圆整

0:人民币零圆整

1:人民币壹圆整

12:人民币壹拾贰圆整

10:人民币壹拾圆整

102:人民币壹佰零贰圆整

110:人民币壹佰壹拾圆整

1002:人民币壹仟零贰圆整

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

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

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

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

100:人民币壹佰圆整

10000:人民币壹万圆整

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

0.34:人民币零圆叁角肆分

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

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

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

has been rewritten as an open source extension package: rmb-capital (https://packagist.org/packages/chuoke/rmb-capital)

Recommended learning: "PHP video tutorial"

The above is the detailed content of PHP enables easy conversion of numerical amounts into traditional Chinese capital letters (actual test). For more information, please follow other related articles on the PHP Chinese website!

Related labels:
php
source:learnku.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!