php实现将人民币金额转大写的方法类
程序员文章站
2022-05-22 19:13:51
...
工作中偶尔会碰到需要将人民币金额,也即阿拉伯数字转化为大写汉字的这种情况,下面是作者经过实践总结出来的方法,特此记录以防备忘。
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) $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.scutephp.com
结果将输出:
壹佰贰拾叁万肆仟伍佰陆拾柒元伍角
相关:JS数字金额转大写金额方法
上一篇: JS中跳出循环代码展示
下一篇: 归纳总结PHP调用WCF的方法(附代码)