PHP开发小技巧①⑨—实现将数字转换为大写金额计数

在我们开发项目过程中,有时会遇到这种情况:当我们在写支付账单的时候需要填写数字金额的大写,有的时候还真的写不出来,这个时候用百度也听尴尬的,特地写了这个方法,可以经常使用,进行直接转换。


代码实现如下:

<?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));

//打印结果:壹仟贰佰叁拾肆万伍仟陆佰柒拾捌圆壹角玖分


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值