Home  >  Article  >  Backend Development  >  How to convert numbers into Chinese characters in php

How to convert numbers into Chinese characters in php

墨辰丷
墨辰丷Original
2018-06-08 16:09:219820browse

This article mainly introduces how to convert numbers into Chinese characters in PHP. Interested friends can refer to it. I hope it will be helpful to everyone.

I encountered an interesting little algorithm question during an interview: I was asked to convert Arabic numerals into Chinese characters and display them (including units). Although it was implemented at that time, the code was a bit messy. So after I got home, I reorganized it.

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

/**
* @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);

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);

Summary: The above is the entire content of this article, I hope it will be helpful to everyone's study.

Related recommendations:

Basic knowledge and application of PHP design patterns

Definition and generation method of PHP barcode

Nine methods of PHP caching

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

Statement:
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