2009年10月29日

[PHP] 阿拉伯數字轉為大寫國字



最近YOGO在知識+看到這個問題常被問到的,剛好手邊之前有收集到相關的程式碼,就在此提供給有需要的朋友囉!! 

   1: <?php

















   2: function getChineseNumber($money){ 

















   3: $ar = array("零", "壹", "貳", "參", "肆", "伍", "陸", "柒", "捌", "玖") ; 

















   4: $cName = array("", "", "拾", "佰", "仟", "萬", "拾", "佰", "仟", "億", "拾億", "佰億", "仟億"); 

















   5: $conver = ""; 

















   6: $cLast = "" ; 

















   7: $cZero = 0; 

















   8: $i = 0; 



































   9: for ($j = strlen($money) ; $j >=1 ; $j--){ 



































  10: $cNum = intval(substr($money, $i, 1)); 



































  11: $cunit = $cName[$j]; //取出位數 



































  12: if ($cNum == 0) { //判斷取出的數字是否為0,如果是0,則記錄共有幾0 



































  13: $cZero++; 



































  14: if (strpos($cunit,"萬億") >0 && ($cLast == "")){ // '如果取出的是萬,億,則位數以萬億來補 



































  15: $cLast = $cunit ; 



































  16: } 



































  17: }else { 



































  18: if ($cZero > 0) {// '如果取出的數字0有n個,則以零代替所有的0 



































  19: if (strpos("萬億", substr($conver, strlen($conver)-2)) >0) { 



































  20: $conver .= $cLast; //'如果最後一位不是億,萬,則最後一位補上"億萬" 



































  21: } 



































  22: $conver .= "零" ; 



































  23: $cZero = 0; 



































  24: $cLast = "" ; 



































  25: } 



































  26: $conver = $conver.$ar[$cNum].$cunit; // '如果取出的數字沒有0,則是中文數字+單位 



































  27: } 



































  28: $i++; 



































  29: } 



































  30: //'判斷數字的最後一位是否為0,如果最後一位為0,則把萬億補上 



































  31: if (strpos("萬億", substr($conver, strlen($conver)-2)) >0) { 



































  32: $conver .=$cLast; // '如果最後一位不是億,萬,則最後一位補上"億萬" 



































  33: }elseif(strlen($money)-1 == $cZero && $cZero >=5){



































  34: $conver .=$cName[5];



































  35: } 



































  36: return $conver; 



































  37: } 



































  38: ?>



















原文出處:http://www.neo.com.tw/archives/903





另外 [題目]php程式設計面試考試  阿拉伯數字轉成國字數字 這二篇文章有更多的解法,提供給有需要的朋友參考一下。







如果覺得這篇文章對您有所幫助,在觀看完文章之餘,希望能點選下方方廣告,當作是對YOGO的支持,讓YOGO更有寫作的動力。


















4 則留言:

人間好時節 提到...

感謝提供的程式碼,相當實用!
但有個小問題向您請教:
就是若帶入金額為:5000000(五百萬)時
系統會解成:五百
不知是否需要做哪些修正?
謝謝!

YOGO 提到...

原文出處的程式碼有錯,我已經修正,你把把
$cName = array("", "", "拾", "佰", "仟", "萬", "拾", "佰", "仟", "億", "拾", "佰", "仟");
改成
$cName = array("", "", "拾", "佰", "仟", "萬", "拾萬", "佰萬", "仟萬", "億萬", "拾億萬", "佰億萬", "仟億萬");
就能解決
5000000
伍佰
的bug

YOGO 提到...

上一次修正後的程式我方現會有bug,我已再次修正,請參考文章中的程式碼

brusemao 提到...

您好,金額為108650時
程式會解成:
壹拾零捌仟陸佰伍拾

應為
壹拾萬零捌仟陸佰伍拾

不知是否要做那些修正?
謝謝!

聖誕跑趴歡樂降★韓版假兩件針織連衣裙$890,新款顯瘦棒球服連帽風衣外套下殺$510,冬新款歐美棉襖棉服連帽短款外套限量↘$530,秋冬新款韓版大碼毛領氣質毛料外套↘$680,快上左耳貓網路購物

您好!如圖太小看不清楚,請 點選此處 看詳細內容 左耳貓蝦皮賣場 https://shopee.tw/hrf5168 左耳貓 露天賣場 http://class.ruten.com.tw/user/index00.php?s=starbox 左耳貓粉...