工作中偶爾會碰到需要將人民幣金額,也即阿拉伯數字轉化為大寫漢字的這種情況,下面是作者經過實踐總結出來的方法,特此記錄以防備忘。
class Num2Cny{ static $basical=array(0=>'零','壹','貳','三','肆','伍','陸','柒','捌','玖'); static $advanced=array(1=>'拾','佰','仟'); public static function ParseNumber($number){ $number=trim($number); if(!is_numeric($number)intval($number)>999999999999) return 'error'; if($number==0) return '零'; if(strpos($number,'.')){ $number=round($number,2); $data=explode('.',$number); $data[0]=self::int($data[0]); $data[1]=self::dec($data[1]); return $data[0].$data[1]; }else{ return self::int($number).'整'; } } public static function int($number){ $arr=array_reverse(str_split($number)); $data=''; $zero=false; $zero_num=0; foreach($arr as $k=>$v){ $_chinese=''; $zero=($v==0)?true:false; $x=$k%4; if($x && $zero && $zero_num>1)continue; switch($x){ case 0: if($zero){ $zero_num=0; }else{ $_chinese=self::$basical[$v]; $zero_num=1; } if($k==8){ $_chinese.='億'; }elseif($k==4){ $_chinese.='萬'; } break; default: if($zero){ if($zero_num==1){ $_chinese=self::$basical[$v]; $zero_num++; } }else{ $_chinese=self::$basical[$v]; $_chinese.=self::$advanced[$x]; } } $data=$_chinese.$data; } return $data.'元'; } public static function dec($number){ if(strlen($number)<2) $number.='0'; $arr=array_reverse(str_split($number)); $data=''; $zero_num=false; foreach($arr as $k=>$v){ $zero=($v==0)?true:false; $_chinese=''; if($k==0){ if(!$zero){ $_chinese=self::$basical[$v]; $_chinese.='分'; $zero_num=true; } }else{ if($zero){ if($zero_num){ $_chinese=self::$basical[$v]; } }else{ $_chinese=self::$basical[$v]; $_chinese.='角'; } } $data=$_chinese.$data; } return $data; }}
使用過程也很簡單,如下:
echo Num2Cny::ParseNumber(1234567.5);//www.Alixixi.com
結果將輸出:
壹佰貳拾三萬肆仟伍佰陸拾柒元伍角
另外說明一下的是如果僅需要將阿拉伯數字轉化為大寫的情況下,可參照本站文章:
PHP將阿拉伯數字轉化為漢字的函數