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代码
Mar 08 PHP
WordPress判断用户是否登录的代码
Mar 17 PHP
在WINDOWS中设置计划任务执行PHP文件的方法
Dec 19 PHP
PHP number_format() 函数定义和用法
Jun 01 PHP
关于PHP递归算法和应用方法介绍
Apr 15 PHP
hadoop中一些常用的命令介绍
Jun 19 PHP
PHP基于imap获取邮件实例
Nov 11 PHP
PHP实现文件上传与下载实例与总结
Mar 13 PHP
php制作圆形用户头像的实例_自定义封装类源代码
Sep 18 PHP
php双层循环(九九乘法表)
Oct 23 PHP
浅谈PHP实现大流量下抢购方案
Dec 15 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
Oct 10 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 和 MySQL 开发的 8 个技巧
2006/10/09 PHP
PHP中判断变量为空的几种方法小结
2013/11/12 PHP
php数组去重复数据示例
2014/02/25 PHP
JavaScript入门教程(5) js Screen屏幕对象
2009/01/31 Javascript
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
网页中可关闭的漂浮窗口实现可自行调节
2013/08/20 Javascript
javascript数组去重方法汇总
2015/04/23 Javascript
使用jQuery Ajax 请求webservice来实现更简练的Ajax
2016/08/04 Javascript
javascript汉字拼音互转的简单实例
2016/10/09 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
从零开始学习Node.js系列教程六:EventEmitter发送和接收事件的方法示例
2017/04/13 Javascript
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
使用SVG基本操作API的实例讲解
2017/09/14 Javascript
解决layui弹框失效的问题
2019/09/09 Javascript
小程序实现上下移动切换位置
2019/09/23 Javascript
[01:34:42]NAVI vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python实现关键词提取的示例讲解
2018/04/28 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
python类共享变量操作
2020/09/03 Python
一些常用的HTML5模式(pattern) 总结
2015/07/14 HTML / CSS
Holiday Inn中国官网:IHG旗下假日酒店预订
2018/04/08 全球购物
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
美国基督教约会网站:ChristianCafe.com
2020/02/04 全球购物
电子商务专业学生的自我鉴定
2013/11/28 职场文书
大学自荐信
2013/12/12 职场文书
军训感想500字
2014/02/20 职场文书
大学生自我评价范文分享
2014/02/21 职场文书
对教师的评语
2014/04/28 职场文书
服务承诺书格式
2014/05/21 职场文书
信息与计算机科学职业规划范文:成为一艘有方向的船
2014/09/11 职场文书
保密工作整改报告
2014/11/06 职场文书
导游经典开场白——导游词
2019/04/17 职场文书
新学期小学班主任工作计划
2019/06/21 职场文书
2019大学毕业晚会主持词
2019/06/21 职场文书
GitHub上77.9K的Axios项目有哪些值得借鉴的地方详析
2021/06/15 Javascript
Go中的条件语句Switch示例详解
2021/08/23 Golang