欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

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

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数字金额转大写金额方法