PHP价格数字转为中文大写汉字

将价格数字转为中文大写

介绍了几种php将金额数字转化为中文大写的实用函数,各有优劣,小伙伴们根据自己的项目需求自由选择吧。

方法1:

header('content-type:text/html;charset=utf8');

echo toChineseNumber(1234988867890.222);//壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾圆

function toChineseNumber($money){

$money = round($money,2);

$cnynums = array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");

$cnyunits = array("圆","角","分");

$cnygrees = array("拾","佰","仟","万","拾","佰","仟","亿");

@list($int,$dec) = explode(".",$money,2);

@$dec = array_filter(array($dec[1],$dec[0]));

$ret = array_merge($dec,array(implode("",cnyMapUnit(str_split($int),$cnygrees)),""));

$ret = implode("",array_reverse(cnyMapUnit($ret,$cnyunits)));

return str_replace(array_keys($cnynums),$cnynums,$ret);

}

function cnyMapUnit($list,$units) {

$ul=count($units);

$xs=array();

foreach (array_reverse($list) as $x) {

$l=count($xs);

if ($x!="0" || !($l%4))

@$n=($x=='0'?'':$x).($units[($l-1)%$ul]);

else @$n=is_numeric($xs[0][0])?$x:'';

array_unshift($xs,$n);

}

return $xs;

}

方法2:

function num_to_rmb($num){

$c1 = "零壹贰叁肆伍陆柒捌玖";

$c2 = "分角元拾佰仟万拾佰仟亿";

//精确到分后面就不要了,所以只留两个小数位

$num = round($num, 2);

//将数字转化为整数

$num = $num * 100;

if (strlen($num) > 10) {

return "金额太大,请检查";

}

$i = 0;

$c = "";

while (1) {

if ($i == 0) {

//获取最后一位数字

$n = substr($num, strlen($num)-1, 1);

} else {

$n = $num % 10;

}

//每次将最后一位数字转化为中文

$p1 = substr($c1, 3 * $n, 3);

$p2 = substr($c2, 3 * $i, 3);

if ($n != '0' || ($n == '0' && ($p2 == '亿' || $p2 == '万' || $p2 == '元'))) {

$c = $p1 . $p2 . $c;

} else {

$c = $p1 . $c;

}

$i = $i + 1;

//去掉数字最后一位了

$num = $num / 10;

$num = (int)$num;

//结束循环

if ($num == 0) {

break;

}

}

$j = 0;

$slen = strlen($c);

while ($j

//utf8一个汉字相当3个字符

$m = substr($c, $j, 6);

//处理数字中很多0的情况,每次循环去掉一个汉字“零”

if ($m == '零元' || $m == '零万' || $m == '零亿' || $m == '零零') {

$left = substr($c, 0, $j);

$right = substr($c, $j + 3);

$c = $left . $right;

$j = $j-3;

$slen = $slen-3;

}

$j = $j + 3;

}

//这个是为了去掉类似23.0中最后一个“零”字

if (substr($c, strlen($c)-3, 3) == '零') {

$c = substr($c, 0, strlen($c)-3);

}

//将处理的汉字加上“整”

if (empty($c)) {

return "零元整";

}else{

return $c . "整";

}

}

echo num_to_rmb(89542365.22);

方法三(不支持小数):

function convert_2_cn($num) {

$convert_cn = array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");

$repair_number = array('零仟零佰零拾零','万万','零仟','零佰','零拾');

$unit_cn = array("拾","佰","仟","万","亿");

$exp_cn = array("","万","亿");

$max_len = 12;

$len = strlen($num);

if($len > $max_len) {

return 'outnumber';

}

$num = str_pad($num,12,'-',STR_PAD_LEFT);

$exp_num = array();

$k = 0;

for($i=12;$i>0;$i--){

if($i%4 == 0) {

$k++;

}

$exp_num[$k][] = substr($num,$i-1,1);

}

$str = '';

foreach($exp_num as $key=>$nums) {

if(array_sum($nums)){

$str = array_shift($exp_cn) . $str;

}

foreach($nums as $nk=>$nv) {

if($nv == '-')

if($nk == 0) {

$str = $convert_cn[$nv] . $str;

} else {

$str = $convert_cn[$nv].$unit_cn[$nk-1] . $str;

}

}

}

$str = str_replace($repair_number,array('万','亿','-'),$str);

$str = preg_replace("/-/","",$str);

$str = str_replace(array('零','-'),array('','零'),$str);

return $str;

}

echo convert_2_cn(12234567);

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180928G0H76F00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券