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实现ODBC数据分页显示一例
Oct 09 PHP
PHP初学入门
Nov 19 PHP
台湾中原大学php教程孙仲岳主讲
Jan 07 PHP
自动把纯文本转换成Web页面的php代码
Aug 27 PHP
PHP CURL模拟GET及POST函数代码
Apr 25 PHP
Windows 下的 PHP-PEAR 安装方法
Nov 20 PHP
php设计模式 Facade(外观模式)
Jun 26 PHP
查找mysql字段中固定字符串并替换的几个方法
Sep 23 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
Jan 11 PHP
php使用for语句输出三角形的方法
Jun 09 PHP
php根据一个给定范围和步进生成数组的方法
Jun 19 PHP
PHP设计模式之装饰器模式实例详解
Feb 07 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
攻克CakePHP系列一 连接MySQL数据库
2008/10/22 PHP
CodeIgniter生成静态页的方法
2016/05/17 PHP
ThinkPHP5分页paginate代码实例解析
2020/11/10 PHP
文本加密解密
2006/06/23 Javascript
js+CSS 图片等比缩小并垂直居中实现代码
2008/12/01 Javascript
JQuery实现简单的服务器轮询效果实例
2016/03/31 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
jQuery焦点图轮播效果实现方法
2016/12/19 Javascript
深入理解JavaScript中的预解析
2017/01/04 Javascript
详解webpack进阶之插件篇
2017/07/06 Javascript
Angular数据绑定机制原理
2018/04/17 Javascript
nodejs中函数的调用实例详解
2018/10/31 NodeJs
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
vue实现动态表格提交参数动态生成控件的操作
2020/11/09 Javascript
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
Python创建xml的方法
2015/03/10 Python
python读取TXT到数组及列表去重后按原来顺序排序的方法
2015/06/26 Python
Python随机数用法实例详解【基于random模块】
2017/04/18 Python
详解python之多进程和进程池(Processing库)
2017/06/09 Python
Python实现动态图解析、合成与倒放
2018/01/18 Python
python实现判断一个字符串是否是合法IP地址的示例
2018/06/04 Python
python实现随机梯度下降法
2020/03/24 Python
pandas 将索引值相加的方法
2018/11/15 Python
Django框架 querySet功能解析
2019/09/04 Python
Python3常用内置方法代码实例
2019/11/18 Python
python NumPy ndarray二维数组 按照行列求平均实例
2019/11/26 Python
python多线程使用方法实例详解
2019/12/30 Python
TensorBoard 计算图的查看方式
2020/02/15 Python
Django中的模型类设计及展示示例详解
2020/05/29 Python
html5使用canvas画一条线
2014/12/15 HTML / CSS
int *p=NULL和*p= NULL有什么区别
2014/10/23 面试题
关于抽烟的检讨书
2014/02/25 职场文书
倡议书格式范文
2014/04/14 职场文书
从QQtabBar看css命名规范BEM的详细介绍
2021/08/07 HTML / CSS