根据人民币大写金额规范,转换有几点要注意的:

阿拉伯数字中间有“0”时,中文大写金额中间可以只写一个“零”字。如¥1,409.50,应写成人民币壹仟肆佰零玖圆伍角。
阿拉伯数字中间连续有几个“0”,中文大写金额中间可以只写一个“零”字,如¥6,007.14,应写成人民币陆仟零柒圆壹角肆分。
阿拉伯金额数字万位或元位是“0”,或者数字中间连续有几个“0”,万位、元位也是“0”,但仟位、角位不是“0”时,中文大写金额中可以只写一个零字,也可以不写“零”字,如¥1,680.32,应写成人民币壹仟陆佰>捌拾元零三角贰分,或者写成人民币壹仟陆佰捌拾元三角贰分;又如¥107,000.53,应写成人民币壹拾万柒仟元零伍角叁分,或者写成人民币壹拾万柒仟圆伍角叁分。
阿拉伯金额数字角位是“0”,而分位不是“0”时,中文大写金额“元”后面应写“零”字。如¥16,409.02,应写成人民币壹万陆仟肆佰零玖元零贰分;又如¥325.04,应写成人民币叁佰贰拾圆零肆分。
大写金额到“元”为止的,在“元”之后应写上“整”或“正”字,在“角”之后可以不写“整”或“正”字,在“分”之后的不写”整“或”正“字。

基本思路,每4个一组,表示千、百、拾,然后加上亿、万、圆,这样的,如果有重复的0,需要忽略

public class MoneyToChiness{public static void main(String[] args) {long l = System.currentTimeMillis();System.out.println(MoneyToChiness.moneyToChinese(new BigDecimal("999999999999.99")));System.out.println(System.currentTimeMillis()-l);}public static String moneyToChinese(BigDecimal i_money) {if(i_money.equals(BigDecimal.ZERO)){return "零圆整";}Double max = 1000000000000D;Double min = 0.01D;if (i_money.doubleValue() >= max  || i_money.doubleValue() < min) {return "大于1万亿或小于1分了";}i_money = i_money.setScale(2, RoundingMode.HALF_UP);String numStr = i_money.toString();int pointPos = numStr.indexOf('.');//整数部分String s_int = null;//小数部分String s_point = null;if (pointPos >= 0) {s_int = numStr.substring(0, pointPos);s_point = numStr.substring(pointPos + 1);} else {s_int = numStr;}StringBuilder sb = new StringBuilder();if(!"0".equals(s_int)){int groupCount = (int) Math.ceil(s_int.length() / 4.0);for (int group = 0; group < groupCount; group++) {boolean zeroFlag = true;boolean noZeroFlag = false;int start = (s_int.length() % 4 == 0 ? 0 : (s_int.length() % 4 - 4)) + 4 * group;for (int i = 0; i < 4; i++) {if (i + start >= 0) {int value = s_int.charAt(i + start) - '0';if (value > 0) {sb.append(CN_UPPER_NUMBER[value]);if (i < 3) {sb.append(CN_UPPER_UNIT[i]);}zeroFlag = true;noZeroFlag = true;} else if (zeroFlag) {sb.append('零');zeroFlag = false;}}}if(sb.charAt(sb.length() - 1) == '零'){sb.deleteCharAt(sb.length() - 1);}if(noZeroFlag || groupCount - group == 1){sb.append(CN_GROUP[groupCount - group - 1]);}}}if (s_point == null || "00".equals(s_point)) {sb.append('整');}else{int j = s_point.charAt(0) - '0';int f = s_point.charAt(1) - '0';if(j > 0){sb.append(CN_UPPER_NUMBER[j]).append('角');if(f != 0){sb.append(CN_UPPER_NUMBER[f]).append('分');}}else if("0".equals(s_int)){sb.append(CN_UPPER_NUMBER[f]).append('分');}else {sb.append('零').append(CN_UPPER_NUMBER[f]).append('分');}}return sb.toString();}private static final char[] CN_UPPER_NUMBER = "零壹贰叁肆伍陆柒捌玖".toCharArray();private static final char[] CN_UPPER_UNIT = "仟佰拾".toCharArray();private static final char[] CN_GROUP = "圆万亿".toCharArray();
}

执行三次耗时分别为,6毫秒,5毫秒,6毫秒,平均5.67毫秒。在我电脑CPU90%的情况下测得。

转自https://www.cnblogs.com/xcr1234/p/9140867.html

转载于:https://www.cnblogs.com/ibigboy/p/10980861.html

java 金额数字转换大写算法相关推荐

  1. 用VBA在word创建宏,功能是金额数字转换大写

    以下是一个简单的VBA代码示例,可用于将Word文档中所选单元格中的数字金额转换为大写金额: ``` Sub ConvertCurrencyToWords() Dim cell As Range Fo ...

  2. oracle里存储函数将金额数字转换成大写

    CREATE OR REPLACE FUNCTION NUMBER_TO_CHINESE(P_NUM IN NUMBER DEFAULT NULL)RETURN NVARCHAR2 IS/*Ver:1 ...

  3. C语言-如何将用户输入的金额数字转换成中文大写?

    实战: 如何将用户输入的金额数字转换成中文大写? #include <stdio.h>int main() {// 输入金额转换成大写int money; // 输入数字int money ...

  4. 金额数字转换成中文写法

    import java.math.BigDecimal; /** * <p> * Title: 金额数字转换成中文写法 * </p> * <p> * Descrip ...

  5. 金额数字转换(英文、中文)

    金额数字转大写英文 public String parseNumber(String x) {if (x == null || x.equals(""))return " ...

  6. php数字转英文,PHP金额数字转换成英文

    PHP金额数字转换成英文 $numTable[40]="FORTY "; $numTable[50]="FIFTY "; $numTable[60]=" ...

  7. vue金额数字转大写的方法

    // 金额数字转大写digitUppercase(price) {const fraction = ['角', '分']const digit = ['零', '壹', '贰', '叁', '肆', ...

  8. 初学Python:银行金额数字转大写汉字

    初学Python:银行金额数字转大写汉字 list_chinese = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖', '拾'] list_uni ...

  9. php数值变成函数,PHP实现金额数字转换成大写函数

    最近做一个财务的一个功能,其中有一个地方需要将阿拉伯数字形式的金额显示成大写(老写)的汉字形式,于是有了下面的代码... function num_to_upper($num) { $d = arra ...

  10. 金额数字转换(小写转大写)

    人民币金额,小写转大写.代码如下: public String convert(String money) {String[] numberCNN = {"零","壹&q ...

最新文章

  1. 域控制器活动目录之备份与恢复
  2. currency in SalesPipeline
  3. PAT_B_1051_Java(15分)
  4. Musik音乐社区整套UI网站模板
  5. 剑指Offer之二叉树中的和为某一路径的值
  6. js json制表符报错_Node.js一个好汉的三个帮
  7. 制造业实施大数据战略面临哪些挑战
  8. linux启动tongweb命令,东方通tongweb linux安装(示例代码)
  9. sketch up rbs/rbz/rb插件安装方法
  10. 线性代数(一)矩阵和方程组
  11. 网记者采访时,一直称李某萍为“妻子”
  12. libero-soc许可证申请和环境配置
  13. 电脑强制关机以后计算机无法启动,win10系统电脑强制关机后导致无法启动的教程...
  14. Java字节码角度分析方法调用 ——提升硬实力7
  15. web网页设计实例作业 ——中国茶文化(30页) HTML网页制作作品 简单文化网页设计成品 dreamweaver学生网站模板
  16. 个人“乱七八糟”笔记和摘要
  17. peerDependencies WARNING问题剖析
  18. python网络课程答案_Python语言应用知到网课答案
  19. Symbian S60 5th 切换程序UI方向为横屏或竖屏
  20. Redis 位图数据结构介绍

热门文章

  1. Dell笔记本外接显示器—显示器模糊、字体不清晰
  2. Codeforces - 1152B - Neko Performs Cat Furrier Transform
  3. 技术总监面试题(Java),看看你会多少?
  4. webpack 的plugin简单实现 customize-cra
  5. inurl_搜索引擎命令site,intitle,inurl,分别代表什么意思
  6. 【捞】明朝灭亡的经济原因
  7. 盘点阿里巴巴 34 个牛逼 GitHub 项目
  8. 实战NLP beginner任务一:基于机器学习的文本分类
  9. qq服务器上的文件删除后如何恢复,QQ文件失效怎么恢复(过期的QQ文件如何申请恢复)...
  10. 【DP】洛谷 P1510 精卫填海