人民币(RMB)小写/数字转换大写工具类,精确到分,修复‘圆零零’为‘圆整’,修复科学计数法处理异常。

    /*** 转换为中国人民币大写字符串,精确到分* @param money 传入小写数字字符串* @return String* @throws Exception*/public static String toRMBUpper(String money) throws Exception {boolean lessZero = false;//When money is scientific notationif (money.contains("E")){BigDecimal bg = new BigDecimal(Double.valueOf(money));money = bg.toPlainString();}if(money.startsWith("-")) {money = money.substring(1);lessZero = true;}if (!money.matches("^[0-9]*$|^0+\\.[0-9]+$|^[1-9]+[0-9]*$|^[1-9]+[0-9]*.[0-9]+$")) {throw new Exception("钱数格式错误!");}String[] part = money.split("\\.");String integerData = part[0];String decimalData = part.length > 1 ? part[1] : "";//Replace front 0if(integerData.matches("^0+$")){integerData = "0";}else if(integerData.matches("^0+(\\d+)$")){integerData = integerData.replaceAll("^0+(\\d+)$", "$1");}StringBuffer integer = new StringBuffer();for (int i = 0; i < integerData.length(); i++) {char perchar = integerData.charAt(i);integer.append(upperNumber(perchar));integer.append(upperNumber(integerData.length() - i - 1));}StringBuffer decimal = new StringBuffer();if (part.length > 1 && !"00".equals(decimalData)) {int length = decimalData.length() >= 2 ? 2 : decimalData.length();for (int i = 0; i < length; i++) {char perchar = decimalData.charAt(i);decimal.append(upperNumber(perchar));if (i == 0)decimal.append('角');if (i == 1)decimal.append('分');}}String result = integer.toString() + decimal.toString();result = dispose(result);if(lessZero && !"零圆整".equals(result)) {result = "负" + result;}return result;}private static char upperNumber(char number) {switch (number) {case '0':return '零';case '1':return '壹';case '2':return '贰';case '3':return '叁';case '4':return '肆';case '5':return '伍';case '6':return '陆';case '7':return '柒';case '8':return '捌';case '9':return '玖';}return '0';}private static char upperNumber(int index) {int realIndex =  index  % 9;if(index > 8) {realIndex =  (index - 9) % 8;realIndex = realIndex + 1;}switch (realIndex) {case 0:return '圆';case 1:return '拾';case 2:return '佰';case 3:return '仟';case 4:return '万';case 5:return '拾';case 6:return '佰';case 7:return '仟';case 8:return '亿';}return '0';}private static String dispose(String result) {result = result.replaceAll("0", "");result = result.replaceAll("零仟零佰零拾|零仟零佰|零佰零拾|零仟|零佰|零拾", "零");result = result.replaceAll("零+", "零").replace("零亿", "亿");result = result.matches("^.*亿零万[^零]仟.*$") ? result.replace("零万", "零") : result.replace("零万", "万");result = result.replace("亿万", "亿");//Processing decimalsresult = result.replace("零角", "零").replace("零分", "");result = result.replaceAll("(^[零圆]*)(.+$)", "$2");result = result.replaceAll("(^.*)([零]+圆)(.+$)", "$1圆零$3");//Processing integerresult = result.replaceAll("圆零角零分|圆零角$|圆$|^零$|圆零$|圆零零$|零圆$", "圆整");result = result.replaceAll("^圆整$", "零圆整");return result;}public static void main(String[] args) throws Exception {//TestSystem.out.println(toRMBUpper("9999999999.0"));//Out: 玖拾玖亿玖仟玖佰玖拾玖万玖仟玖佰玖拾玖圆整}

Java --人民币(RMB)小写/数字转换大写工具类相关推荐

  1. 人民币(RMB)小写/数字转换大写工具类,精确到分,修复‘圆零零’为‘圆整’,修复科学计数法处理异常。

    /*** 转换为中国人民币大写字符串,精确到分* @param money 传入小写数字字符串* @return String* @throws Exception*/public static St ...

  2. php 小写数字转换大写中文

    /**     *数字金额转换成中文大写金额的函数     *String Int  $num  要转换的小写数字或小写字符串     *return 大写字母     *小数位为两位     **/ ...

  3. 财务转换工具 - 人民币金额转大写工具类 java 版本

    文章目录 财务转换工具 - 人民币金额转大写工具类 java 版本 1.示例 2.代码 财务转换工具 - 人民币金额转大写工具类 java 版本 1.示例 public static void mai ...

  4. 小写数字转换成大写数字

    前两天看到一道题,关于小写数字转换成大写的.也就是将"1023050405"这样的数字转换为"十亿二千三百零五万零四百零五". 这个是个算法问题,其它语言也是相 ...

  5. java将小写数字变成大写输出

    import java.util.Scanner; public class Cap { //方法1 将小写数字变成大写并输出switch private static void capitalNum ...

  6. Java 数字转汉字工具类

    Java 数字转汉字工具类 一.工具类--NumberToCnUtil package com.example.demotest.util;import java.util.Arrays; impor ...

  7. Java随机字符串:随机数字字符串,工具类

    Java中生成随机数,字符串的工具类 1. 调用方法需要传入生成字符串的长度和需要的类型 生成随机数字 生成随机字母字符串 生成随机字符串+数字等 ......... 2. 总共8种类型,具体看工具类 ...

  8. 在Excel中将人民币金额小写转成大写(转)

    在Excel中将人民币金额小写转成大写(转)[@more@] Excel中要将人民币小写金额转换成大写格式,将自定义格式类型中的"G/通用格式"改为"G/通用格式&quo ...

  9. Excel中将人民币金额小写转成大写(转)

    Excel中将人民币金额小写转成大写(转) Excel中要将人民币小写金额转换成大写格式,将自定义格式类型中的"G/通用格式"改为"G/通用格式"元" ...

  10. php小写数字变成大写,php 小写数字怎么转大写

    php小写数字转大写的实现方法:首先创建一个PHP示例文件:然后通过"private function getChineseNumber($num, $mode = true){...}&q ...

最新文章

  1. C++文件读写 打开方式等比较全
  2. java集合框架介绍_Java集合框架介绍
  3. Opencv一维直方图的绘制
  4. iBATIS存储过程
  5. innodb_flush_log_at_trx_commit和sync_binlog参数详解
  6. Python中Image缩放、旋转、翻转等操作
  7. EasyUI框架01——基础学习
  8. 词法分析之LED文件生成程序【调试中......】
  9. 3分钟速读原著《Java数据结构与算法》(一)
  10. java抖音字符视频_java爬取新版抖音无水印视频教程(2020/09/14附带java代码)
  11. wps交叉引用更新域遇到错误!未找到(错误!未定义)
  12. Maya模型导入到Unity3d 的秘诀
  13. PS 滤镜算法原理——浮雕效果
  14. Java三类注释使用方法及注意事项
  15. 计算机网络谢希仁第七版课后习题答案(第三章)
  16. 高数:微分中值定理介值定理证明题浅析
  17. 诺贝丽斯宣布成功完成收购爱励铝业
  18. 学习OpenCV3:Cmake+MinGW编译OpenCV
  19. 远程连接docker中的SQL Server
  20. 生僻字存不到mysql_数据库存储生僻字存在的问题

热门文章

  1. 主流浏览器兼容性问题与解决方案
  2. win7系统gpt分区激活工具哪个好?
  3. xmpp 即时通讯协议研究
  4. [软件工程基础]结队项目——地铁
  5. 53-20210316华为海思Hi3516DV300的linux系统通过网口刷机(eMMC模式)
  6. 简单控制台项目:电影购票系统
  7. 资源共享的两阶段交叉效率DEA模型及matlab应用:地区科技投入产出效率案例分析,文后有网盘链接
  8. 5.3 数值分析: 差商的定义及性质
  9. 计算机一级考试创建快捷方式,九月计算机一级MSOffice考试试题
  10. Android Studio4.0解决Gradle下载超时问题