在我们开发项目过程中,有时会遇到这种情况:当我们在写支付账单的时候需要填写数字金额的大写,有的时候还真的写不出来,这个时候用百度也听尴尬的,特地写了这个方法,可以经常使用,进行直接转换。
代码实现如下:
<?php /** * ======================================= * Created by ZHIHUA·WEI. * Author: ZHIHUA·WEI * Date: 2018/1/29 * Time: 10:10 * Project: PHP开发小技巧 * Power: 实现将数字转换为大写金额计数 * ======================================= */ /** * 函数:将数字转换为大写金额 * @param $number int 输入的数字 * @return string */ header("Content-type:text/html;charset=utf-8"); function NumberTransformCny($number) { //定义数字大写、人名币单位、数字单位 static $NumbersUp = array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"), $CnyUnits = array("圆", "角", "分"), $NumUnits = array("拾", "佰", "仟", "万", "拾", "佰", "仟", "亿"); //将数字按小数点分开 //num1为整数部分,num2为小数部分 list($num1, $num2) = explode(".", $number, 2); //将小数点后两位分开,此时num2为数组 $num2 = array_filter(array($num2[1], $num2[0])); //将整数部分进行转换 $ret = array_merge($num2, array(implode("", _Cny_Map_Unit(str_split($num1), $NumUnits)), "")); $ret = implode("", array_reverse(_Cny_Map_Unit($ret, $CnyUnits))); return str_replace(array_keys($NumbersUp), $NumbersUp, $ret); } /** * 函数:将整数转换成带单位字符串 * @param $list array 数字数组 * @param $units array 单位数组 * @return array */ function _Cny_Map_Unit($list, $units) { $u_num = count($units); $ret = array(); foreach (array_reverse($list) as $item) { $num = count($ret); if ($item != "0" || !($num % 4)) $n = ($item == '0' ? '' : $item) . ($units[($num - 1) % $u_num]); else $n = is_numeric($ret[0][0]) ? $item : ''; array_unshift($ret, $n); } return $ret; } $number = 12345678.19; var_dump(NumberTransformCny($number)); //打印结果:壹仟贰佰叁拾肆万伍仟陆佰柒拾捌圆壹角玖分