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环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
Nov 17 PHP
php Undefined index和Undefined variable的解决方法
Mar 27 PHP
php设计模式 Template (模板模式)
Jun 26 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
Jun 17 PHP
PHP工程师VIM配置分享
Dec 15 PHP
thinkphp3.2点击刷新生成验证码
Feb 16 PHP
解决微信授权回调页面域名只能设置一个的问题
Dec 11 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
Dec 15 PHP
php微信开发之谷歌测距
Jun 14 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
Jul 01 PHP
php解决安全问题的方法实例
Sep 19 PHP
Laravel 简单实现Ajax滚动加载示例
Oct 22 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网页游戏学习之Xnova(ogame)源码解读(十一)
2014/06/25 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
为超链接加上disabled后的故事
2010/12/10 Javascript
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
基于javascript实现窗口抖动效果
2016/01/03 Javascript
Bootstrap开发实战之第一次接触Bootstrap
2016/06/02 Javascript
实用jquery操作表单元素的简单代码
2016/07/04 Javascript
更靠谱的H5横竖屏检测方法(js代码)
2016/09/13 Javascript
vue中用H5实现文件上传的方法实例代码
2017/05/27 Javascript
详解webpack进阶之loader篇
2017/08/23 Javascript
javascript 产生随机数的几种方法总结
2017/09/26 Javascript
vue中轮训器的使用
2019/01/27 Javascript
微信小程序通过websocket实时语音识别的实现代码
2020/08/19 Javascript
python实现文本去重且不打乱原本顺序
2016/01/26 Python
python实现简单购物商城
2016/05/21 Python
Linux下python3.7.0安装教程
2018/07/30 Python
python 将list转成字符串,中间用符号分隔的方法
2018/10/23 Python
Python中shapefile转换geojson的示例
2019/01/03 Python
Python qqbot 实现qq机器人的示例代码
2019/07/11 Python
Flask框架中request、请求钩子、上下文用法分析
2019/07/23 Python
Django 使用easy_thumbnails压缩上传的图片方法
2019/07/26 Python
python多线程与多进程及其区别详解
2019/08/08 Python
Python pandas RFM模型应用实例详解
2019/11/20 Python
HTML5 Canvas实现烟花绽放特效
2016/03/02 HTML / CSS
新加坡最佳婴儿用品店:Mamahood.com.sg
2018/08/26 全球购物
用C或者C++语言实现SOCKET通信
2015/02/24 面试题
工程测量与监理专业应届生求职信
2013/11/27 职场文书
农贸市场管理制度
2014/01/31 职场文书
2014最新毕业证代领委托书
2014/09/26 职场文书
2015年法律事务部工作总结
2015/07/27 职场文书
民政局2016年“六一”儿童节慰问活动总结
2016/04/06 职场文书
初中生入团申请书范文(五篇)
2019/10/16 职场文书
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL
Mysql binlog日志文件过大的解决
2021/10/05 MySQL
在Python 中将类对象序列化为JSON
2022/04/06 Python
python的html标准库
2022/04/29 Python