正好前陣子有需要,從螢火飛的 VB 版本移植到 PHP 上。
function getChineseNumber($money){
$ar = array(“零”, “壹”, “貳”, “參”, “肆”, “伍”, “陸”, “柒”, “捌”, “玖”) ;
$cName = array(“”, “”, “拾”, “佰”, “仟”, “萬”, “拾”, “佰”, “仟”, “億”, “拾”, “佰”, “仟”);
$conver = “”;
$cLast = “” ;
$cZero = 0;
$i = 0;
for ($j = strlen($money) ; $j >=1 ; $j–){
$cNum = intval(substr($money, $i, 1));
$cunit = $cName[$j]; //取出位數
if ($cNum == 0) { //判斷取出的數字是否為0,如果是0,則記錄共有幾0
$cZero++;
if (strpos($cunit,”萬億”) >0 && ($cLast == “”)){ // ‘如果取出的是萬,億,則位數以萬億來補
$cLast = $cunit ;
}
}else {
if ($cZero > 0) {// ‘如果取出的數字0有n個,則以零代替所有的0
if (strpos(“萬億”, substr($conver, strlen($conver)-2)) >0) {
$conver .= $cLast; //’如果最後一位不是億,萬,則最後一位補上”億萬”
}
$conver .= “零” ;
$cZero = 0;
$cLast = “” ;
}
$conver = $conver.$ar[$cNum].$cunit; // ‘如果取出的數字沒有0,則是中文數字+單位
}
$i++;
}
//’判斷數字的最後一位是否為0,如果最後一位為0,則把萬億補上
if (strpos(“萬億”, substr($conver, strlen($conver)-2)) >0) {
$conver .=$cLast; // ‘如果最後一位不是億,萬,則最後一位補上”億萬”
}
return $conver;
}
6 comments On [PHP] 阿拉伯數字轉為大寫國字
實際上遇到的反倒是大寫國字改為阿拉伯數字
原因是政府改採用橫式公文,部分數字格式要做轉換,已符合研考會規範。
去年面試的時候,就被他用這題問倒了
沒想到可以這麼單純呀
難怪不能錄取, 看來還有很長的路要走
有bug
100000
壹拾
把
$cName = array(“”, “”, “拾”, “佰”, “仟”, “萬”, “拾”, “佰”, “仟”, “億”, “拾”, “佰”, “仟”);
改成
$cName = array(“”, “”, “拾”, “佰”, “仟”, “萬”, “拾萬”, “佰萬”, “仟萬”, “億萬”, “拾億萬”, “佰億萬”, “仟億萬”);
就能解決
100000
壹拾
的bug
我發現我上一個解法有bug,後來改成這樣就ok了,提供給各位朋友參考一下
$conver .=$cLast;
}elseif(strlen($money)-1 == $cZero && $cZero >=5){
測試結果,還是有bug
如10005678
11000457
超過十萬,穿插一些0,就會有bug