Home > Backend Development > PHP Problem > Two ways to convert numbers to Chinese in PHP

Two ways to convert numbers to Chinese in PHP

藏色散人
Release: 2023-02-28 20:42:01
Original
3152 people have browsed it

Two ways to convert numbers to Chinese in PHP

Two methods of converting numbers to Chinese in php

Go directly to the example and write it to 100 billion.

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

The output result shows:

一百五十
Copy after login

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

The output result shows:

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

For more related knowledge, please pay attention to PHP Chinese website! !

The above is the detailed content of Two ways to convert numbers to Chinese in PHP. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
php
source:php.cn
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