Neo 's Blog

Neo 's Blog

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

正好前陣子有需要,從螢火飛的 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 Responses so far.

  1. 晴樹 說道:

    實際上遇到的反倒是大寫國字改為阿拉伯數字
    原因是政府改採用橫式公文,部分數字格式要做轉換,已符合研考會規範。

  2. tka 說道:

    去年面試的時候,就被他用這題問倒了
    沒想到可以這麼單純呀
    難怪不能錄取, 看來還有很長的路要走

  3. Zeke 說道:

    有bug
    100000
    壹拾

  4. YOGO 說道:


    $cName = array("", "", "拾", "佰", "仟", "萬", "拾", "佰", "仟", "億", "拾", "佰", "仟");
    改成
    $cName = array("", "", "拾", "佰", "仟", "萬", "拾萬", "佰萬", "仟萬", "億萬", "拾億萬", "佰億萬", "仟億萬");
    就能解決
    100000
    壹拾
    的bug

  5. YOGO 說道:

    我發現我上一個解法有bug,後來改成這樣就ok了,提供給各位朋友參考一下

    $conver .=$cLast;
    }elseif(strlen($money)-1 == $cZero && $cZero >=5){

  6. cmin 說道:

    測試結果,還是有bug
    如10005678
    11000457
    超過十萬,穿插一些0,就會有bug


搜尋

分類

歷史文章

贊助