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.MVC的模板标签系统(五)
Sep 05 PHP
php生成随机密码的三种方法小结
Sep 04 PHP
php debug 安装技巧
Apr 30 PHP
php学习之function的用法
Jul 14 PHP
php 发送带附件邮件示例
Jan 23 PHP
php与flash as3 socket通信传送文件实现代码
Aug 16 PHP
PHP使用array_fill定义多维数组的方法
Mar 18 PHP
PHP中Http协议post请求参数
Nov 02 PHP
一波PHP中cURL库的常见用法代码示例
May 06 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
Oct 11 PHP
Yii2.0实现生成二维码功能实例
Oct 24 PHP
PHP实现提高SESSION响应速度的几种方法详解
Aug 09 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 cookis创建实现代码
2009/03/16 PHP
xss防御之php利用httponly防xss攻击
2014/03/21 PHP
一个严格的PHP Session会话超时时间设置方法
2014/06/10 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
谷歌浏览器 insertCell与appendChild的区别
2009/02/12 Javascript
JQuery 学习技巧总结
2010/05/21 Javascript
js加入收藏夹代码(兼容ie/ff/op)
2014/05/16 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
JavaScript实现的多个图片广告交替显示效果代码
2015/09/04 Javascript
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
微信小程序 picker-view 组件详解及简单实例
2017/01/10 Javascript
Bootstrap下拉菜单样式
2017/02/07 Javascript
javascript实现秒表计时器的制作方法
2017/02/16 Javascript
详解VueJs异步动态加载块
2017/03/09 Javascript
如何使用Bootstrap创建表单
2017/03/29 Javascript
CentOS 安装NodeJS V8.0.0的方法
2017/06/15 NodeJs
Vue实现底部侧边工具栏的实例代码
2018/09/03 Javascript
vue下载excel的实现代码后台用post方法
2019/05/10 Javascript
js HTML DOM EventListener功能与用法实例分析
2020/04/27 Javascript
vue-router 控制路由权限的实现
2020/09/24 Javascript
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
2020/10/09 jQuery
Python简单实现控制电脑的方法
2018/01/22 Python
Python实现的tcp端口检测操作示例
2018/07/24 Python
一行代码让 Python 的运行速度提高100倍
2018/10/08 Python
PyTorch中Tensor的维度变换实现
2019/08/18 Python
Django中使用Json返回数据的实现方法
2020/06/03 Python
Pycharm及python安装详细教程(图解)
2020/07/31 Python
通过实例解析python and和or使用方法
2020/11/14 Python
python中zip()函数遍历多个列表方法
2021/02/18 Python
一款基于css3和jquery实现的动画显示弹出层按钮教程
2015/01/04 HTML / CSS
澳大利亚当地最大的时装生产商:Cue
2018/08/06 全球购物
Nordgreen美国官网:在线购买极简主义斯堪的纳维亚手表
2019/07/24 全球购物
应届生简历中的自我评价
2014/01/13 职场文书
《东方明珠》教学反思
2014/04/20 职场文书
2019年第四季度财务部门工作计划
2019/11/02 职场文书
MySQL infobright的安装步骤
2021/04/07 MySQL