PHP把数字转成人民币大写的函数分享
做财务的人遇到过这么一个问题,比如13,126.8元,在发票或者其他记账业务中,一般要使用大写进行拼读成“壹万叁仟壹佰贰拾陆元捌角整”。
这不,也贴上我原来在做学车网的一个php函数,供大家参考吧。
/** *人民币小写转大写 * *@paramstring$number数值 *@paramstring$int_unit币种单位,默认"元",有的需求可能为"圆" *@parambool$is_round是否对小数进行四舍五入 *@parambool$is_extra_zero是否对整数部分以0结尾,小数存在的数字附加0,比如1960.30 *@returnstring */ functionrmb_format($money=0,$int_unit='元',$is_round=true,$is_extra_zero=false){ //将数字切分成两段 $parts=explode('.',$money,2); $int=isset($parts[0])?strval($parts[0]):'0'; $dec=isset($parts[1])?strval($parts[1]):''; //如果小数点后多于2位,不四舍五入就直接截,否则就处理 $dec_len=strlen($dec); if(isset($parts[1])&&$dec_len>2){ $dec=$is_round?substr(strrchr(strval(round(floatval("0.".$dec),2)),'.'),1):substr($parts[1],0,2); } //当number为0.001时,小数点后的金额为0元 if(empty($int)&&empty($dec)){ return'零'; } //定义 $chs=array('0','壹','贰','叁','肆','伍','陆','柒','捌','玖'); $uni=array('','拾','佰','仟'); $dec_uni=array('角','分'); $exp=array('','万'); $res=''; //整数部分从右向左找 for($i=strlen($int)-1,$k=0;$i>=0;$k++){ $str=''; //按照中文读写习惯,每4个字为一段进行转化,i一直在减 for($j=0;$j<4&&$i>=0;$j++,$i--){ $u=$int{$i}>0?$uni[$j]:'';//非0的数字后面添加单位 $str=$chs[$int{$i}].$u.$str; } $str=rtrim($str,'0');//去掉末尾的0 $str=preg_replace("/0+/","零",$str);//替换多个连续的0 if(!isset($exp[$k])){ $exp[$k]=$exp[$k-2].'亿';//构建单位 } $u2=$str!=''?$exp[$k]:''; $res=$str.$u2.$res; } //如果小数部分处理完之后是00,需要处理下 $dec=rtrim($dec,'0'); var_dump($dec); //小数部分从左向右找 if(!empty($dec)){ $res.=$int_unit; //是否要在整数部分以0结尾的数字后附加0,有的系统有这要求 if($is_extra_zero){ if(substr($int,-1)==='0'){ $res.='零'; } } for($i=0,$cnt=strlen($dec);$i<$cnt;$i++){ $u=$dec{$i}>0?$dec_uni[$i]:'';//非0的数字后面添加单位 $res.=$chs[$dec{$i}].$u; if($cnt==1) $res.='整'; } $res=rtrim($res,'0');//去掉末尾的0 $res=preg_replace("/0+/","零",$res);//替换多个连续的0 }else{ $res.=$int_unit.'整'; } return$res; }
使用就很简单了
$yuan=13598.3; $ret=rmb_format($yuan);