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采集腾讯微博的实现代码
Jan 19 PHP
php数据结构与算法(PHP描述) 查找与二分法查找
Jun 21 PHP
利用curl 多线程 模拟 并发的详解
Jun 14 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
Oct 26 PHP
php 获取SWF动画截图示例代码
Feb 10 PHP
PHP生成自定义长度随机字符串的函数分享
May 04 PHP
php实现singleton()单例模式实例
Nov 06 PHP
微信随机生成红包金额算法php版
Jul 21 PHP
PHP使用curl函数发送Post请求的注意事项
Nov 26 PHP
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
Jul 03 PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
Sep 02 PHP
基于PHP实现的多元线性回归模拟曲线算法
Jan 30 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设计模式之装饰器模式定义与用法详解
2018/04/02 PHP
浅谈Laravel中的三种中间件的作用
2019/10/13 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
Display SQL Server Version Information
2007/06/21 Javascript
如何解决Jquery库及其他库之间的$命名冲突
2013/09/15 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
2015/03/28 Javascript
总结JavaScript中布尔操作符||与&amp;&amp;的使用技巧
2015/11/17 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
2016/01/26 Javascript
js计算时间差代码【包括计算,天,时,分,秒】
2016/04/26 Javascript
js判断空对象的实例(超简单)
2016/07/26 Javascript
深入学习jQuery中的data()
2016/12/22 Javascript
Mac下使用charles遇到的问题以及解决办法
2017/01/10 Javascript
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
详解vue组件基础
2018/05/04 Javascript
ng-events类似ionic中Events的angular全局事件
2018/09/05 Javascript
ES6的Fetch异步请求的实现方法
2018/12/07 Javascript
[01:01:35]Optic vs paiN 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[01:28]一分钟告诉你DOTA2 TI9不朽宝藏Ⅱ中有什么!
2019/07/09 DOTA
[55:44]完美世界DOTA2联赛决赛 FTD vs Phoenix 第二场 11.08
2020/11/11 DOTA
Python中使用PIL库实现图片高斯模糊实例
2015/02/08 Python
Python中生成器和yield语句的用法详解
2015/04/17 Python
window下eclipse安装python插件教程
2017/04/24 Python
机器学习10大经典算法详解
2017/12/07 Python
Python验证码截取识别代码实例
2020/05/16 Python
keras实现基于孪生网络的图片相似度计算方式
2020/06/11 Python
HTML5 window/iframe跨域传递消息 API介绍
2013/08/26 HTML / CSS
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
Edwaybuy西班牙:小米在线商店
2019/12/04 全球购物
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
班主任工作年限证明
2014/01/12 职场文书
纪念一二九运动演讲稿
2014/09/16 职场文书
法定代表人授权委托书范文
2014/09/22 职场文书
质监局领导班子对照检查材料思想汇报
2014/09/27 职场文书
政府个人对照检查材料思想汇报
2014/10/08 职场文书
2014年优质护理服务工作总结
2014/11/14 职场文书