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


Posted in PHP onJune 30, 2014

做财务的人遇到过这么一个问题,比如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);
PHP 相关文章推荐
发挥语言的威力--融合PHP与ASP
Oct 09 PHP
如何隐藏你的.php文件
Jan 04 PHP
php 图像函数大举例(非原创)
Jun 20 PHP
PHP 检查扩展库或函数是否可用的代码
Apr 06 PHP
PHP图片处理类 phpThumb参数用法介绍
Mar 11 PHP
PHP实现读取一个1G的文件大小
Aug 24 PHP
PHP中使用SimpleXML检查XML文件结构实例
Jan 07 PHP
PHP序列化/对象注入漏洞分析
Apr 18 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
Dec 21 PHP
PHP小白必须要知道的php基础知识(超实用)
Oct 10 PHP
laravel 错误处理,接口错误返回json代码
Oct 25 PHP
php在linux环境中如何使用redis详解
Dec 15 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
Jun 30 #PHP
PHP把JPEG图片转换成Progressive JPEG的方法
Jun 30 #PHP
PHP把小数转成整数3种方法
Jun 30 #PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
Jun 29 #PHP
php防止伪造的数据从URL提交方法
Jun 27 #PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
Jun 27 #PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
Jun 27 #PHP
You might like
PHP OPCode缓存 APC详细介绍
2010/10/12 PHP
Php中文件下载功能实现超详细流程分析
2012/06/13 PHP
php实现加减法验证码代码
2014/02/14 PHP
php中final关键字用法分析
2016/12/07 PHP
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
网页前端登录js按Enter回车键实现登陆的两种方法
2016/05/10 Javascript
全面解析多种Bootstrap图片轮播效果
2016/05/27 Javascript
Javascript的比较汇总
2016/07/25 Javascript
JavaScript中push(),join() 函数 实例详解
2016/09/06 Javascript
jQuery Easyui datagrid editor为combobox时指定数据源实例
2016/12/19 Javascript
JS文件/图片从电脑里面拖拽到浏览器上传文件/图片
2017/03/08 Javascript
深入理解Node中的buffer模块
2017/06/03 Javascript
完美实现js拖拽效果 return false用法详解
2017/07/28 Javascript
js实现省市级联效果分享
2017/08/10 Javascript
Bootstrap 3多级下拉菜单实例
2017/11/23 Javascript
基于node.js实现微信支付退款功能
2017/12/19 Javascript
详解创建自定义的Angular Schematics
2018/06/06 Javascript
JavaScript键盘事件常见用法实例分析
2019/01/03 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
微信小程序实现上传多张图片、删除图片
2020/07/29 Javascript
VSCode 配置uni-app的方法
2020/07/11 Javascript
python3访问sina首页中文的处理方法
2014/02/24 Python
Python入门篇之数字
2014/10/20 Python
Python实现文件内容批量追加的方法示例
2017/08/29 Python
Python对数据进行插值和下采样的方法
2018/07/03 Python
Python中的xlrd模块使用原理解析
2020/05/21 Python
虚拟环境及venv和virtualenv的区别说明
2021/02/05 Python
爱淘宝:淘宝网购物分享平台
2017/04/28 全球购物
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
J2EE模式面试题
2016/10/11 面试题
上课迟到检讨书100字
2014/01/11 职场文书
初中生期末评语大全
2014/04/24 职场文书
防灾减灾日活动总结
2014/08/26 职场文书
2014年最新大专生职业生涯规划书范文
2014/09/13 职场文书
世界水日宣传活动总结
2015/02/09 职场文书
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL