Maison > développement back-end > Problème PHP > Deux façons de convertir des nombres en chinois en PHP

Deux façons de convertir des nombres en chinois en PHP

藏色散人
Libérer: 2023-02-28 20:42:01
original
3171 Les gens l'ont consulté

Deux façons de convertir des nombres en chinois en PHP

Deux méthodes de conversion de nombres en chinois en PHP

Utilisez directement l'exemple et écrivez-le en centaines de milliards .

<?php
/**
* 把数字1-1亿换成汉字表述,如:123->一百二十三
* @param [num] $num [数字]
* @return [string] [string]
*/
function numToWord($num)
{
$chiNum = array(&#39;零&#39;, &#39;一&#39;, &#39;二&#39;, &#39;三&#39;, &#39;四&#39;, &#39;五&#39;, &#39;六&#39;, &#39;七&#39;, &#39;八&#39;, &#39;九&#39;);
$chiUni = array(&#39;&#39;,&#39;十&#39;, &#39;百&#39;, &#39;千&#39;, &#39;万&#39;, &#39;亿&#39;, &#39;十&#39;, &#39;百&#39;, &#39;千&#39;);
 
$chiStr = &#39;&#39;;
 
$num_str = (string)$num;
 
$count = strlen($num_str);
$last_flag = true; //上一个 是否为0
$zero_flag = true; //是否第一个
$temp_num = null; //临时数字
 
$chiStr = &#39;&#39;;//拼接结果
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 ? &#39;&#39; : $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

Le résultat de sortie affiche :

一百五十
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

Le résultat de sortie affiche :

0123648867.789
普通:零一二三六四八八六七点七八九
金额(简体):一亿二千三百六十四万八千八百六十七元七角八分
金额(繁体):壹億贰仟叁佰陆拾肆萬捌仟捌佰陆拾柒元柒角捌分
Copier après la connexion

Pour plus de connaissances connexes, veuillez prêter attention à Site Web PHP chinois  ! !

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