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 相关文章推荐
在任意字符集下正常显示网页的方法二(续)
Apr 01 PHP
初学CAKEPHP 基础教程
Nov 02 PHP
php生成略缩图代码
Jul 16 PHP
php牛逼的面试题分享
Jan 18 PHP
PHP中::、-&amp;gt;、self、$this几种操作符的区别介绍
Apr 24 PHP
PHP数据库万能引擎类adodb配置使用以及实例集锦
Jun 12 PHP
php常用hash加密函数
Nov 22 PHP
PHP中使用hidef扩展代替define提高性能
Apr 09 PHP
PHP依赖注入原理与用法分析
Aug 21 PHP
php实现数组中出现次数超过一半的数字的统计方法
Oct 14 PHP
php 防护xss,PHP的防御XSS注入的终极解决方案
Apr 01 PHP
php修改word的实例方法
Nov 17 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中的数组操作函数整理
2008/08/18 PHP
php中数组首字符过滤功能代码
2012/07/31 PHP
PHP时间戳与日期之间转换的实例介绍
2013/04/19 PHP
php版微信公众平台入门教程之开发者认证的方法
2016/09/26 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
2017/05/04 PHP
JS面向对象编程之对象使用分析
2010/08/19 Javascript
基于jquery的页面划词搜索JS
2010/09/14 Javascript
js中如何复制一个对象并获取其所有属性和属性对应的值
2013/10/24 Javascript
分享一个自己动手写的jQuery分页插件
2014/08/28 Javascript
jquery实现动态画圆
2014/12/04 Javascript
基于nodejs+express(4.x+)实现文件上传功能
2015/11/23 NodeJs
在React框架中实现一些AngularJS中ng指令的例子
2016/03/06 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
Bootstrap风格的zTree右键菜单
2017/02/17 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
从零撸一个pc端vue的ui组件库( 计数器组件 )
2019/08/08 Javascript
详解Python中__str__和__repr__方法的区别
2015/04/17 Python
Python中利用sorted()函数排序的简单教程
2015/04/27 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
2017/09/26 Python
完美解决Pycharm无法导入包的问题 Unresolved reference
2018/05/18 Python
python生成1行四列全2矩阵的方法
2018/08/04 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
2019/03/27 Python
详解Python中正则匹配TAB及空格的小技巧
2019/07/26 Python
基于Python+Appium实现京东双十一自动领金币功能
2019/10/31 Python
关于Django Models CharField 参数说明
2020/03/31 Python
python基于opencv 实现图像时钟
2021/01/04 Python
纯CSS3实现手风琴风格菜单具体步骤
2013/05/06 HTML / CSS
世界上最大的字体市场:MyFonts
2020/01/10 全球购物
远东集团网络工程师面试题
2014/10/20 面试题
外贸实习生自荐信范文
2013/11/24 职场文书
运动会广播稿60字
2014/01/15 职场文书
寝室长工作失责检讨书
2014/10/06 职场文书
2016年“节能宣传周”活动总结
2016/04/05 职场文书
责任书格式
2019/04/18 职场文书
SQL实现LeetCode(197.上升温度)
2021/08/07 MySQL
聊聊CSS粘性定位sticky案例解析
2022/06/01 HTML / CSS