PHP permet de convertir facilement des montants numériques en majuscules chinoises traditionnelles (test réel)

藏色散人
Libérer: 2023-04-10 17:10:02
avant
3641 Les gens l'ont consulté

Vous pouvez aller tester ici. (https://sandbox.onlinephpfunctions.com/code/0cc068d3c89904e55d8aa9e55fdfa45eaab70c37)

Convertir les montants numériques en majuscules chinoises traditionnelles :

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);
    }
}
Copier après la connexion

La fonction ne vérifie pas si les paramètres sont des valeurs numériques

Un test simple :

:人民币零圆整

dsfa:人民币零圆整

0:人民币零圆整

1:人民币壹圆整

12:人民币壹拾贰圆整

10:人民币壹拾圆整

102:人民币壹佰零贰圆整

110:人民币壹佰壹拾圆整

1002:人民币壹仟零贰圆整

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

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

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

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

100:人民币壹佰圆整

10000:人民币壹万圆整

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

0.34:人民币零圆叁角肆分

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

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

123456789:人民币壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖圆整
Copier après la connexion

a été modifié en tant que package d'extension Open source : rmb-capital (https://packagist.org/packages/chuoke/rmb-capital)

Apprentissage recommandé : "

Tutoriel vidéo PHP
"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
php
source:learnku.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!