1、数字中文化/货币化

  • 转自 github.com/wilon/php-n…
if (! function_exists('number2chinese')) {/*** number2chinese description** · 个,十,百,千,万,十万,百万,千万,亿,十亿,百亿,千亿,万亿,十万亿,*   百万亿,千万亿,兆;此函数亿乘以亿为兆** · 以「十」开头,如十五,十万,十亿等。两位数以上,在数字中部出现,则用「一十几」,*   如一百一十,一千零一十,一万零一十等** · 「二」和「两」的问题。两亿,两万,两千,两百,都可以,但是20只能是二十,*   200用二百也更好。22,2222,2222是「二十二亿两千二百二十二万两千二百二十二」** · 关于「零」和「〇」的问题,数字中一律用「零」,只有页码、年代等编号中数的空位*   才能用「〇」。数位中间无论多少个0,都读成一个「零」。2014是「两千零一十四」,*   20014是「二十万零一十四」,201400是「二十万零一千四百」** 参考:https://jingyan.baidu.com/article/636f38bb3cfc88d6b946104b.html** @param  minx  $number* @param  boolean $isRmb* @return string*/function number2chinese($number, $isRmb = false){// 判断正确数字if (!preg_match('/^-?\d+(\.\d+)?$/', $number)) {throw new Exception('number2chinese() wrong number', 1);}list($integer, $decimal) = explode('.', $number . '.0');// 检测是否为负数$symbol = '';if (substr($integer, 0, 1) == '-') {$symbol = '负';$integer = substr($integer, 1);}if (preg_match('/^-?\d+$/', $number)) {$decimal = null;}$integer = ltrim($integer, '0');// 准备参数$numArr  = ['', '一', '二', '三', '四', '五', '六', '七', '八', '九', '.' => '点'];$descArr = ['', '十', '百', '千', '万', '十', '百', '千', '亿', '十', '百', '千', '万亿', '十', '百', '千', '兆', '十', '百', '千'];if ($isRmb) {$number = substr(sprintf("%.5f", $number), 0, -1);$numArr  = ['', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖', '.' => '点'];$descArr = ['', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾', '佰', '仟', '万亿', '拾', '佰', '仟', '兆', '拾', '佰', '仟'];$rmbDescArr = ['角', '分', '厘', '毫'];}// 整数部分拼接$integerRes = '';$count = strlen($integer);if ($count > max(array_keys($descArr))) {throw new Exception('number2chinese() number too large.', 1);} else if ($count == 0) {$integerRes = '零';} else {for ($i = 0; $i < $count; $i++) {$n = $integer[$i];      // 位上的数$j = $count - $i - 1;   // 单位数组 $descArr 的第几位// 零零的读法$isLing = $i > 1                    // 去除首位&& $n !== '0'                   // 本位数字不是零&& $integer[$i - 1] === '0';    // 上一位是零$cnZero = $isLing ? '零': '';$cnNum  = $numArr[$n];// 单位读法$isEmptyDanwei = ($n == '0' && $j % 4 != 0)     // 是零且一断位上|| substr($integer, $i - 3, 4) === '0000';  // 四个连续0$descMark = isset($cnDesc) ? $cnDesc : '';$cnDesc = $isEmptyDanwei ? '' : $descArr[$j];// 第一位是一十if ($i == 0 && $cnNum == '一' && $cnDesc == '十') $cnNum = '';// 二两的读法$isChangeEr = $n > 1 && $cnNum == '二'       // 去除首位&& !in_array($cnDesc, ['', '十', '百'])  // 不读两\两十\两百&& $descMark !== '十';                   // 不读十两if ($isChangeEr ) $cnNum = '两';$integerRes .=  $cnZero . $cnNum . $cnDesc;}}// 小数部分拼接$decimalRes = '';$count = strlen($decimal);if ($decimal === null) {$decimalRes = $isRmb ? '整' : '';} else if ($decimal === '0') {$decimalRes = '零';} else if ($count > max(array_keys($descArr))) {throw new Exception('number2chinese() number too large.', 1);} else {for ($i = 0; $i < $count; $i++) {if ($isRmb && $i > count($rmbDescArr) - 1) break;$n = $decimal[$i];$cnZero = $n === '0' ? '零' : '';$cnNum  = $numArr[$n];$cnDesc = $isRmb ? $rmbDescArr[$i] : '';$decimalRes .=  $cnZero . $cnNum . $cnDesc;}}// 拼接结果$res = $symbol . ($isRmb ?$integerRes . ($decimalRes === '零' ? '元整' : "元$decimalRes"):$integerRes . ($decimalRes ==='' ? '' : "点$decimalRes"));return $res;}
}
复制代码

php自定义函数记录一相关推荐

  1. 【SQL编程】Greenplum 实现树结构+自定义函数+避免函数重复调用+ function cannot execute on a QE slice 问题处理(优化过程全记录)

    1.需求说明 这是一个关于POI的应用,数据从水经微图下载而来,需要处理的是街道层级的数据,但是最终的POI信息要有省.市.县数据,所有需要用到行政区划表来补全数据. 2.编程实例 2.1 实现树结构 ...

  2. T-SQL里数据库工程师都不知道的秘密之SQL Server自定义函数UDF

    T-SQL SQL Server UDF自定义函数概念与案例实战 函数的定义 这里的函数指的是用户自定义函数(UDF)全名为(user-defined function),以下简称为函数. 它是数据库 ...

  3. 流水号结合自定义函数实现申请业务

    需求: 客户有个需求是想利用行式填报表的流水号来进行一个申请业务的处理(主键自动生成).但是在行式填报表中对流水号的触发只能在行式报表的插入功能的进行触发,这对于刚进入报表展现页面自动展现第一条记录就 ...

  4. mogodb 的自定义函数定义及引用

    在学习MONGODB 遇到以下问题: 函数 getNextSequence 生成序列号,官方方法: 建立一张表,记录某一个表的_ID 当前值.后面调用此函数生成下一个序列号, 在测试此函数时,遇到以下 ...

  5. mysql存储过程和自定义函数

    2019独角兽企业重金招聘Python工程师标准>>> 存储过程简介 SQL语句需要先编辑后执行,而存储过程是一组为了完成特定功能的SQL语句集,经编译后存储过程在数据库中,用户通过 ...

  6. 数据库系列之mysql 自定义函数function,函数和存储过程的区别

    mysql 自定义函数function,函数和存储过程的区别 https://blog.csdn.net/u010365819/article/details/80470448 https://blo ...

  7. php系统函数代码,PHP自定义函数+系统函数库(代码示例)

    全局变量$n = 5; //全局变量 function fun1(){ global $n; echo '我在函数体内也可以调用全局变量n,它的值是:' , $n;//5 $n++; } fun1() ...

  8. MATLAB求音频信号特征的自定义函数.md

    分帧和分窗处理: 对信号x加窗分帧处理 1234567 wlen=50; % 帧长 inc=18; % 帧移 win=hanning(wlen); % 窗函数 fn=floor(((N-wlen)/i ...

  9. PHP常用的自定义函数

    PHP常用的自定义函数 目录 php常用自定义函数类下载 php 设置字符编码为utf-8 路径格式化(替换双斜线为单斜线) 转码 打印输出 api返回信息 字符串截取 方法一: 方法二: 数组 字符 ...

最新文章

  1. Python制作当年第一款手机游戏-贪吃蛇游戏(练习)
  2. Python 绘图与可视化 matplotlib 制作Gif动图
  3. BP反向传播算法的思考和直观理解 -卷积小白的随机世界
  4. 组策略的优先级是 本地》站点》域》组织单位
  5. sqlserver 实现数据库全文检索
  6. 电子工程师,学会阅读Datasheet很重要!
  7. Python学习——常见的字符串匹配
  8. 非常优秀的iphone学习文章总结!
  9. MacBook2016在SSD上安装Win To Go(成功经验分享)
  10. iOS14 UIDatePicker的变化
  11. YAF 接口 2016-10-27
  12. HIKROBT海康系列软件下载
  13. 有限元法基本思想和分类
  14. 多张图片怎么合成一个pdf文件?
  15. 安装GLPI资产管理
  16. 三国志战略版:三势法正出奇效,藤甲张角新篇章
  17. 博客页面添加动态小人,二次元人物 hexo live2d html人物公仔
  18. 使用ivx中表格组件的经验总结
  19. linux查看以i开头的文件,Linux文件查找Day.13
  20. 金蝶K3服务器一键配置精灵

热门文章

  1. Lanecat网猫案例小议
  2. NioEventLoopGroup 源码分析
  3. 企业无线网演进 2.4GHz或被5GHz频段取代
  4. js跨域 jsop 使用
  5. 解决HP t5335z瘦客户机休眠问题
  6. Flex利用Datagrid来设置全选和单选
  7. Uninstalling ASP.NET MVC 1.1 after installing Visual Studio 2010 beta 2
  8. Android MuPDF 部署
  9. 《『若水新闻』客户端开发教程》——15代码编写(7)
  10. Data Lake Analytics,大数据的ETL神器!