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 相关文章推荐
默默简单的写了一个模板引擎
Jan 02 PHP
NOT NULL 和NULL
Jan 15 PHP
PHP6 先修班 JSON实例代码
Aug 23 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
Feb 22 PHP
PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用
May 07 PHP
3款值得推荐的微信开发开源框架
Oct 28 PHP
php获取发送给用户的header信息的方法
Mar 16 PHP
php PDO实现的事务回滚示例
Mar 23 PHP
php压缩文件夹最新版
Jul 18 PHP
php中的依赖注入实例详解
Aug 14 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
Sep 10 PHP
解决PhpStorm64不能启动的问题
Jun 20 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
Session的工作方式
2006/10/09 PHP
php适配器模式简单应用示例
2019/10/23 PHP
JObj预览一个JS的框架
2008/03/13 Javascript
javascript css在IE和Firefox中区别分析
2009/02/18 Javascript
document.compatMode介绍
2009/05/21 Javascript
JavaScript中两种链式调用实现代码
2011/01/12 Javascript
jquery为页面增加快捷键示例
2014/01/31 Javascript
原生js结合html5制作简易的双色子游戏
2015/03/30 Javascript
jQuery滚动条插件nanoscroller使用指南
2015/04/21 Javascript
JavaScript中使用自然对数ln的方法
2015/06/14 Javascript
jQuery实现的跨容器无缝拖动效果代码
2016/06/21 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
2017/01/24 Javascript
JavaScript中offsetWidth的bug及解决方法
2017/05/17 Javascript
jQuery操作DOM_动力节点Java学院整理
2017/07/04 jQuery
JQuery 获取多个select标签option的text内容(实例)
2017/09/07 jQuery
基于js 字符串indexof与search方法的区别(详解)
2017/12/04 Javascript
node全局变量__dirname与__filename的区别
2019/01/14 Javascript
JavaScript中作用域链的概念及用途讲解
2020/08/06 Javascript
Python内置模块ConfigParser实现配置读写功能的方法
2018/02/12 Python
Python实现通讯录功能
2018/02/22 Python
利用Python求阴影部分的面积实例代码
2018/12/05 Python
Python如何使用k-means方法将列表中相似的句子归类
2019/08/08 Python
pyhton中__pycache__文件夹的产生与作用详解
2019/11/24 Python
如何使用python记录室友的抖音在线时间
2020/06/29 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
2021/02/02 Python
有750多个顶级品牌的瑞士时尚在线:ABOUT YOU
2017/01/04 全球购物
婚鞋、新娘鞋、礼服鞋、童鞋:Nina Shoes
2019/09/04 全球购物
马歇尔耳机官网:Marshall Headphones
2020/02/04 全球购物
平面设计自荐信
2013/10/07 职场文书
消防宣传口号
2014/06/16 职场文书
企业与个人合作经营协议书
2014/11/01 职场文书
工程部部长岗位职责
2015/02/12 职场文书
2015年人力资源部工作总结
2015/04/30 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书
详解在OpenCV中如何使用图像像素
2022/03/03 Python
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
2022/08/14 Python