• 技术文章 >php教程 >php手册

    PHP把数字转成人民币大写的函数分享

    2016-06-13 09:31:58原创518
    做财务的人遇到过这么一个问题,比如13,126.8元,在发票或者其他记账业务中,一般要使用大写进行拼读成“壹万叁仟壹佰贰拾陆元捌角整”。

    这不,也贴上我原来在做学车网的一个php函数,供大家参考吧。

    复制代码 代码如下:


    /**
    * 人民币小写转大写
    *
    * @param string $number 数值
    * @param string $int_unit 币种单位,默认"元",有的需求可能为"圆"
    * @param bool $is_round 是否对小数进行四舍五入
    * @param bool $is_extra_zero 是否对整数部分以0结尾,小数存在的数字附加0,比如1960.30
    * @return string
    */
    function rmb_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);

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:PHP 人民币大写
    上一篇:实现在同一方法中获取当前方法中新赋值的session值解决方法 下一篇:ThinkPHP模板判断输出Empty标签用法详解
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• wordpress添加文章浏览统计(刷新不重复)• PHP中使用MySQL按照多字段排序及问题解决• PHP更新购物车数量(表单部分/PHP处理部分)• 创建配置文件 用PHP写出自己的BLOG系统 2• PHP 文件上传功能实现代码
    1/1

    PHP中文网