php实现将人民币金额转大写的办法

工作中偶尔会碰到需要将人民币金额,也即阿拉伯数字转化为大写汉字的这种情况,下面是作者经过实践总结出来的方法,特此记录以防备忘。

  1. class Num2Cny{ 
  2.   static $basical=array(0=>'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'); 
  3.   static $advanced=array(1=>'拾','佰','仟'); 
  4.   public static function ParseNumber($number){ 
  5.     $number=trim($number); 
  6.     if(!is_numeric($number)||intval($number)>999999999999) return 'error'
  7.     if($number==0) return '零'
  8.     if(strpos($number,'.')){ 
  9.       $number=round($number,2); 
  10.       $data=explode('.',$number); 
  11.       $data[0]=self::int($data[0]); 
  12.       $data[1]=self::dec($data[1]); 
  13.       return $data[0].$data[1]; 
  14.     }else
  15.       return self::int($number).'整'
  16.     } 
  17.   } 
  18.   public static function int($number){ 
  19.     $arr=array_reverse(str_split($number)); 
  20.     $data=''
  21.     $zero=false; 
  22.     $zero_num=0; 
  23.     foreach($arr as $k=>$v){ 
  24.       $_chinese=''
  25.       $zero=($v==0)?true:false; 
  26.       $x=$k%4; 
  27.       if($x && $zero && $zero_num>1)continue
  28.       switch($x){ 
  29.         case 0: 
  30.           if($zero){ 
  31.             $zero_num=0; 
  32.           }else
  33.             $_chinese=self::$basical[$v]; 
  34.             $zero_num=1; 
  35.           } 
  36.           if($k==8){ 
  37.             $_chinese.='亿'
  38.           }elseif($k==4){ 
  39.             $_chinese.='万'
  40.           } 
  41.           break;   
  42.         default
  43.           if($zero){ 
  44.             if($zero_num==1){ 
  45.               $_chinese=self::$basical[$v]; 
  46.               $zero_num++; 
  47.             } 
  48.           }else
  49.             $_chinese=self::$basical[$v]; 
  50.             $_chinese.=self::$advanced[$x]; 
  51.           } 
  52.       } 
  53.       $data=$_chinese.$data
  54.     } 
  55.     return $data.'元'
  56.   } 
  57.   public static function dec($number){ 
  58.     if(strlen($number)<2) $number.='0'
  59.     $arr=array_reverse(str_split($number)); 
  60.     $data=''
  61.     $zero_num=false; 
  62.     foreach($arr as $k=>$v){ 
  63.       $zero=($v==0)?true:false; 
  64.       $_chinese=''
  65.       if($k==0){ 
  66.         if(!$zero){ 
  67.           $_chinese=self::$basical[$v]; 
  68.           $_chinese.='分'
  69.           $zero_num=true; 
  70.         } 
  71.       }else
  72.         if($zero){ 
  73.           if($zero_num){ 
  74.             $_chinese=self::$basical[$v]; 
  75.           } 
  76.         }else
  77.           $_chinese=self::$basical[$v]; 
  78.           $_chinese.='角'
  79.         } 
  80.       } 
  81.       $data=$_chinese.$data
  82.     } 
  83.     return $data
  84.   } 

使用过程也很简单,如下:

  1. echo Num2Cny::ParseNumber(1234567.5); 

结果将输出:

壹佰贰拾叁万肆仟伍佰陆拾柒元伍角

转载请注明:代码家园 » php实现将人民币金额转大写的办法

也许你会喜欢和关注与本文内容高度相关的文章:

PHP人民币金额转大写

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)