本方法思路,是将数字分成整数、小数两部分分别处理:

1、  整数部分按照4位一组进行分段,具体详见代码中的array_chunk操作

2、小数部分,为了简单,没有考虑更多小数精度,仅考虑到了“分”,实际可以参照整数部分的处理,更精细化

另外,受限于php语言默认的变量范围大小影响,当数值过大后,会造成小数部分被舍去,这个参照sprintf("%.2f",....)取浮点数的时候,改变其算法即可。 不过一般来说不会超过

其它溢出:若数字超过了stepInt的长度,会报错,但一般你也超过不了,数字最大长度支持到:10^(4 * 18), 大约72位数字长度。这个估计已经超出人的正常读写范围了。

if (! function_exists('num2rmb')) {/*** 数字转换成rmb大写形式* @param string|number $num* @return string*/function num2rmb($num){list($int, $float) = explode('.',  sprintf("%.2f", $num));$intArr = array_chunk(str_split(strrev($int), 1), 4);$floatArr = str_split($float, 1);// 字典定义$stepInt = ['', '万','亿','兆','京','垓','秭','穰','沟','涧','正','载','极','恒河沙','阿僧祇','那由他','不可思议','无量大数'];//$stepFloat = ['角', '分', '厘', '毫', '丝', '忽', '微', '纤', '沙', '尘', '埃', '渺', '莫', '模糊', '逡巡', '须臾', '瞬息', '弹指', '刹那', '六德', '空虚', '清静'];$dict = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];// 返回变量$res = [];// 整数部分处理, 四个数字为一段,分段处理foreach ($intArr as $k => $spec) {// 长度不够强制长度转成一样$len = count($spec);if ($len < 4)  array_push($spec, ...array_fill(0, 4 - $len, 0));list($n1, $n10, $n100, $n1000) = $spec; // 跳过为0的if ($n1000 + $n100 + $n10 + $n1 == 0)  continue;$row = [];$row[] = ($n1000 == 0) ? '?' : $dict[$n1000] . '仟';$row[] = ($n100 == 0)  ? '?' : $dict[$n100] . '佰';$row[] = ($n10 == 0)   ? '?' : $dict[$n10] . '拾';$row[] = ($n1 == 0)    ? '?' : $dict[$n1];// 最多可能四个数字都为0$s = str_replace(['?', '??', '???'], '零', trim(join($row), '?')) . $stepInt[$k];;if ($k > 0 && ($n1000 == 0)) {array_unshift($res, '零');}array_unshift($res, $s);}// 过滤个位数为0的情况if ($res[count($res) - 1] == '零') {array_pop($res);}array_push($res, '圆');// 小数部分处理list($jiao, $fen) = $floatArr;if ($jiao + $fen == 0) {array_push($res, '整');} else {if ($jiao == 0) {array_push($res, '零');array_push($res, $dict[$fen] . '分');} else {array_push($res, $dict[$jiao] . '角');array_push($res, $dict[$fen] . '分');}}return join($res);}
}

财务金额转换:小写金额转换成大写算法相关推荐

  1. 输入一串字符串,将其中的大写字母换成小写,小写字母换成大写输出。

    题目: 输入一串字符串,将其中的大写字母换成小写,小写字母换成大写输出.例如输入abdAd,输出ABDaD. 分析: 题目的关键在于大小写的转换问题,ASCII字符编码的了解和转换问题. 对于ASCI ...

  2. c语言字符串的一个简单例子,把一个字符串中的小写字母改成大写字母

    把一个字符串中小写字母改成大写字母,利用toupper()函数,这个函数定义在 ctype.h 头文件中 #include <stdio.h> #include <ctype.h&g ...

  3. 遍历这些字符串,如果字符串没有包含数字的,就将字符串中的小写字母转成大写字母并打印字符串

    package cn.silence;public class StrDemo3 {/*** 有如下字符串:"12ab","java","cd&quo ...

  4. 遍历这些字符串,如果字符串没有包含数字的, * 就将字符串中的小写字母转成大写字母并打印字符串

    package Day08;import java.util.Scanner;/*** 有如下字符串:"12ab","java","cd", ...

  5. 把一个字符串中所有出现的大写字母都替换成小写字母,同时把小写字母替换成大写字母

    试题描述 把一个字符串中所有出现的大写字母都替换成小写字母,同时把小写字母替换成大写字母. 输入格式 输入一行:待互换的字符串. 输出格式 输出一行:完成互换的字符串(字符串长度小于80). 样例输入 ...

  6. 【函数参数传递】编写一个函数,统计字符串中小写字母的个数,并把字符串中的小写字母转化成大写字母。

    字符串怎么存? 先把字符串中的小写字母统计出来,用strfun()这个函数.当功能比较复杂的时候就一步一步来做. 然后把数组传过来.数组名就是一个指针.需要一个返回值,来记录小写字母的个数,n=str ...

  7. 编写程序,从键盘接收一个字符串,对字符串中的字母进行大小写互转(大写字母转成小写,小写字母转成大写)。

    /*  分析:1,接受一个字符串.   2,大小写转换. */ public class Demo7 {     public static void main(String[] args)throw ...

  8. 将字符串中的小写字母换成大写

    C语言将字符串中的小写换成大写 思路:看ASCII码表,字母的大小写之间相差'32','a'比'A'大32,当遇见小写字母的时候,可以先强制转换成整型,然后-32,再强制转换成字符型输出. #incl ...

  9. 将字符串中的小写字母换成大写字母

    D:将字符串中的小写字母转换成大写字母 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个字符串,将其中所有的小写字母转换成大写字母. 输入 输入一行,包含 ...

  10. 将内存单元中小写字符改成大写字符

    assume cs:codedata segment db 'conversation' data endscode segment start: mov ax,datamov ds,axmov si ...

最新文章

  1. UISearchBar和 UISearchDisplayController的使用
  2. boost::cuthill_mckee_ordering用法的测试程序
  3. Python+Selenium基础篇之2-打开和关闭火狐浏览器
  4. web中间件_HTTP中间件机制实现与原理 - 从零开始写GO-API框架
  5. 软件测试之python面试题_常见Python面试题整理带答案
  6. html音乐静音代码,HTML Audio muted用法及代码示例
  7. Android Stuido插件
  8. [转]Chrome 错误代码:ERR_UNSAFE_PORT
  9. RedHat RealTime Kernel
  10. 第2章 藏书阁签到,修为突破
  11. 《将月夜》——高宠儿
  12. Collections、Set、Map、斗地主排序
  13. uniapp、vue实现滑动拼图验证码
  14. 停车位检测方法研究综述
  15. 小扎不要「脸」了?Facebook正式改名Meta!买它,满仓元宇宙
  16. 神经网络:AlexNet
  17. 测试与自动化测试,记测试工具Go4Api的诞生
  18. vue完整项目,实现即可上岗web前端。
  19. 《调色师手册:电影和视频调色专业技法(第2版)》——往返工作流程(Round-Trip workflows)...
  20. 4.4 埃尔米特插值

热门文章

  1. std::decay 类型萃取
  2. VJ 1385 盗窃-月之眼
  3. 数仓中的维度、原子指标、派生指标、衍生指标、指标分类、缓慢变化维等的含义
  4. Pyside2 Qlabel如何快速添加click鼠标单击事件(新手上路,勿喷!)
  5. 二元二次方程 c语言,C语言求解三元一次方程组的解
  6. 高通平台DDR3初始化
  7. 专升本高数——第二章 一元函数的导数与微分【学习笔记】
  8. BIOS实战之Super IO-Smart Fan
  9. GAN相关论文《Spectral Regularization for Combating Mode Collapse in GANs》
  10. 计算机usb接口失灵,电脑usb接口全部失灵