php 把數(shù)字轉(zhuǎn)換成漢字的代碼
更新時間:2015年07月21日 08:34:52 投稿:hebedich
在一次面試中遇到一個有意思的小算法題:要求將阿拉伯數(shù)字轉(zhuǎn)為漢字顯示出來(包含單位)。當時雖然實現(xiàn)出來,但是代碼寫的有點凌亂。所以回家后,重新整理了一下。
直接上實例,寫到 千億上了。
/**
* @author ja頌
* 把數(shù)字1-1億換成漢字表述,如:123->一百二十三
* @param [num] $num [數(shù)字]
* @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; //臨時數(shù)字
$chiStr = '';//拼接結(jié)果
if ($count == 2) {//兩位數(shù)
$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);
方法二:
<?php
/**
* 數(shù)字轉(zhuǎn)換為中文
* @param string|integer|float $num 目標數(shù)字
* @param integer $mode 模式[true:金額(默認),false:普通數(shù)字表示]
* @param boolean $sim 使用小寫(默認)
* @return string
*/
function number2chinese($num,$mode = true,$sim = true){
if(!is_numeric($num)) return '含有非數(shù)字非小數(shù)點字符!';
$char = $sim ? array('零','一','二','三','四','五','六','七','八','九')
: array('零','壹','貳','叁','肆','伍','陸','柒','捌','玖');
$unit = $sim ? array('','十','百','千','','萬','億','兆')
: array('','拾','佰','仟','','萬','億','兆');
$retval = $mode ? '元':'點';
//小數(shù)部分
if(strpos($num, '.')){
list($num,$dec) = explode('.', $num);
$dec = strval(round($dec,2));
if($mode){
$retval .= "{$char[$dec['0']]}角{$char[$dec['1']]}分";
}else{
for($i = 0,$c = strlen($dec);$i < $c;$i++) {
$retval .= $char[$dec[$i]];
}
}
}
//整數(shù)部分
$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] != '0'? $unit[$i%4] : '';
if($i>1 and $str[$i]+$str[$i-1] == 0){
$out[$i] = '';
}
if($i%4 == 0){
$out[$i] .= $unit[4+floor($i/4)];
}
}
}
$retval = join('',array_reverse($out)) . $retval;
return $retval;
}
//實例調(diào)用=====================================================
$num = '0123648867.789';
echo $num,'<br>';
//普通數(shù)字的漢字表示
echo '普通:',number2chinese($num,false),'';
echo '<br>';
//金額漢字表示
echo '金額(簡體):',number2chinese($num,true),'';
echo '<br>';
echo '金額(繁體):',number2chinese($num,true,false);
以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。
您可能感興趣的文章:
- PHP實現(xiàn)十進制數(shù)字與二十六進制字母串相互轉(zhuǎn)換操作示例
- php使用json_decode后數(shù)字對象轉(zhuǎn)換成了科學計數(shù)法的解決方法
- php實現(xiàn)阿拉伯數(shù)字和羅馬數(shù)字相互轉(zhuǎn)換的方法
- php短網(wǎng)址和數(shù)字之間相互轉(zhuǎn)換的方法
- PHP實現(xiàn)將科學計數(shù)法轉(zhuǎn)換為原始數(shù)字字符串的方法
- php中base_convert()進制數(shù)字轉(zhuǎn)換函數(shù)實例
- PHP中IP地址與整型數(shù)字互相轉(zhuǎn)換詳解
- php導出csv格式數(shù)據(jù)并將數(shù)字轉(zhuǎn)換成文本的思路以及代碼分享
- PHP 金額數(shù)字轉(zhuǎn)換成英文
- PHP數(shù)字金額轉(zhuǎn)換成中文大寫顯示
相關文章
PHP隨機生成中文段落示例【測試網(wǎng)站內(nèi)容時使用】
這篇文章主要介紹了PHP隨機生成中文段落,結(jié)合實例形式分析了PHP針對隨機中文段落的編碼轉(zhuǎn)換、生成相關操作技巧,需要的朋友可以參考下2020-04-04
使用git遷移Laravel項目至新開發(fā)環(huán)境的步驟詳解
這篇文章主要介紹了遷移Laravel項目至新開發(fā)環(huán)境的步驟詳解,需要的朋友可以參考下2020-04-04

