Comment convertir des nombres en caractères chinois en php

墨辰丷
Libérer: 2023-03-30 20:38:02
original
9823 Les gens l'ont consulté

Cet article présente principalement comment convertir des nombres en caractères chinois en PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

J'ai rencontré une petite question d'algorithme intéressante lors d'un entretien : on m'a demandé de convertir des chiffres arabes en caractères chinois et de les afficher (y compris les unités). Bien qu’il ait été implémenté à cette époque, le code était un peu compliqué. Donc, une fois rentré chez moi, je l'ai réorganisé.

Allez directement à l'exemple et écrivez-le à 100 milliards.

/**
* @author ja颂 
* 把数字1-1亿换成汉字表述,如:123->一百二十三
* @param [num] $num [数字]
* @return [string] [string]
*/
function numToWord($num)
{
$chiNum = array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九');
$chiUni = array('','十', '百', '千', '万', '亿', '十', '百', '千');
$chiStr = '';
$num_str = (string)$num;
$count = strlen($num_str);
$last_flag = true; //上一个 是否为0
$zero_flag = true; //是否第一个
$temp_num = null; //临时数字
$chiStr = '';//拼接结果
if ($count == 2) {//两位数
$temp_num = $num_str[0];
$chiStr = $temp_num == 1 ? $chiUni[1] : $chiNum[$temp_num].$chiUni[1];
$temp_num = $num_str[1];
$chiStr .= $temp_num == 0 ? '' : $chiNum[$temp_num]; 
}else if($count > 2){
$index = 0;
for ($i=$count-1; $i >= 0 ; $i--) { 
$temp_num = $num_str[$i];
if ($temp_num == 0) {
if (!$zero_flag && !$last_flag ) {
$chiStr = $chiNum[$temp_num]. $chiStr;
$last_flag = true;
}
}else{
$chiStr = $chiNum[$temp_num].$chiUni[$index%9] .$chiStr;
$zero_flag = false;
$last_flag = false;
}
$index ++;
}
}else{
$chiStr = $chiNum[$num_str[0]]; 
}
return $chiStr;
}
$num = 150;
echo numToWord($num);
Copier après la connexion

Méthode 2 :

<?php
 /**
* 数字转换为中文
* @param  string|integer|float  $num  目标数字
* @param  integer $mode 模式[true:金额(默认),false:普通数字表示]
* @param  boolean $sim 使用小写(默认)
* @return string
*/
 function number2chinese($num,$mode = true,$sim = true){
    if(!is_numeric($num)) return &#39;含有非数字非小数点字符!&#39;;
    $char    = $sim ? array(&#39;零&#39;,&#39;一&#39;,&#39;二&#39;,&#39;三&#39;,&#39;四&#39;,&#39;五&#39;,&#39;六&#39;,&#39;七&#39;,&#39;八&#39;,&#39;九&#39;)
    : array(&#39;零&#39;,&#39;壹&#39;,&#39;贰&#39;,&#39;叁&#39;,&#39;肆&#39;,&#39;伍&#39;,&#39;陆&#39;,&#39;柒&#39;,&#39;捌&#39;,&#39;玖&#39;);
    $unit    = $sim ? array(&#39;&#39;,&#39;十&#39;,&#39;百&#39;,&#39;千&#39;,&#39;&#39;,&#39;万&#39;,&#39;亿&#39;,&#39;兆&#39;)
    : array(&#39;&#39;,&#39;拾&#39;,&#39;佰&#39;,&#39;仟&#39;,&#39;&#39;,&#39;萬&#39;,&#39;億&#39;,&#39;兆&#39;);
    $retval  = $mode ? &#39;元&#39;:&#39;点&#39;;
    //小数部分
    if(strpos($num, &#39;.&#39;)){
        list($num,$dec) = explode(&#39;.&#39;, $num);
        $dec = strval(round($dec,2));
        if($mode){
            $retval .= "{$char[$dec[&#39;0&#39;]]}角{$char[$dec[&#39;1&#39;]]}分";
        }else{
            for($i = 0,$c = strlen($dec);$i < $c;$i++) {
                $retval .= $char[$dec[$i]];
            }
        }
    }
    //整数部分
    $str = $mode ? strrev(intval($num)) : strrev($num);
    for($i = 0,$c = strlen($str);$i < $c;$i++) {
        $out[$i] = $char[$str[$i]];
        if($mode){
            $out[$i] .= $str[$i] != &#39;0&#39;? $unit[$i%4] : &#39;&#39;;
                if($i>1 and $str[$i]+$str[$i-1] == 0){
                $out[$i] = &#39;&#39;;
            }
                if($i%4 == 0){
                $out[$i] .= $unit[4+floor($i/4)];
            }
        }
    }
    $retval = join(&#39;&#39;,array_reverse($out)) . $retval;
    return $retval;
 }
 //实例调用=====================================================
$num = &#39;0123648867.789&#39;;
echo $num,&#39;<br>&#39;;
 //普通数字的汉字表示
echo &#39;普通:&#39;,number2chinese($num,false),&#39;&#39;;
echo &#39;<br>&#39;;
 //金额汉字表示
echo &#39;金额(简体):&#39;,number2chinese($num,true),&#39;&#39;;
echo &#39;<br>&#39;;
echo &#39;金额(繁体):&#39;,number2chinese($num,true,false);
Copier après la connexion

Résumé : Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.

Recommandations associées :

Connaissance de base et application des modèles de conception PHP

Définition et méthode de génération de PHP code-barres

Neuf méthodes de mise en cache 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:php.cn
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