package com.ruoyi.test;import org.apache.commons.lang3.StringUtils;/*** @Title: ConvertUpMoney* @Description:  将数字金额转换为大写中文金额* @date: 2019年6月18日 下午10:52:27*/
public class ConvertUpMoney {// 大写数字private static final String[] NUMBERS = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};// 整数部分的单位private static final String[] IUNIT = {"元","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","万","拾","佰","仟"};// 小数部分的单位private static final String[] DUNIT = {"角","分","厘"};/***  转换为大写的中文金额* @param str 字符串类型的 金额数字* @return*/public static String toChinese(String str) {// 判断输入的金额字符串是否符合要求if (StringUtils.isBlank(str) || !str.matches("(-)?[\\d]*(.)?[\\d]*")) {return "错误金额";}if("0".equals(str) || "0.00".equals(str) || "0.0".equals(str)) {return "零元";}// 判断金额数字中是否存在负号"-"boolean flag = false;if(str.startsWith("-")){// 标志位,标志此金额数字为负数flag = true;str = str.replaceAll("-", "");}// 去掉金额数字中的逗号","str = str.replaceAll(",", "");String integerStr;//整数部分数字String decimalStr;//小数部分数字// 初始化:分离整数部分和小数部分if(str.indexOf(".")>0) {integerStr = str.substring(0,str.indexOf("."));decimalStr = str.substring(str.indexOf(".") + 1);}else if(str.indexOf(".")==0) {integerStr = "";decimalStr = str.substring(1);}else {integerStr = str;decimalStr = "";}// beyond超出计算能力,直接返回if(integerStr.length()>IUNIT.length) {return "超出计算能力!";}// 整数部分数字int[] integers = toIntArray(integerStr);// 判断整数部分是否存在输入012的情况if (integers.length>1 && integers[0] == 0) {return "抱歉,输入数字不符合要求!";}// 设置万单位boolean isWan = isWan5(integerStr);// 小数部分数字int[] decimals = toIntArray(decimalStr);// 返回最终的大写金额String result = getChineseInteger(integers, isWan) + getChineseDecimal(decimals);if(flag){// 如果是负数,加上"负"return "负" + result;}else{return result;}}/***  将字符串转为int数组* @param number  数字* @return*/private static int[] toIntArray(String number) {int[] array = new int[number.length()];for(int i = 0;i<number.length();i++) {array[i] = Integer.parseInt(number.substring(i,i+1));}return array;}/***  将整数部分转为大写的金额* @param integers 整数部分数字* @param isWan  整数部分是否已经是达到【万】* @return*/public static String getChineseInteger(int[] integers,boolean isWan) {StringBuffer chineseInteger = new StringBuffer("");int length = integers.length;if (length == 1 && integers[0] == 0) {return "";}for(int i=0; i<length; i++) {String key = "";if(integers[i] == 0) {if((length - i) == 13)//万(亿)key = IUNIT[4];else if((length - i) == 9) {//亿key = IUNIT[8];}else if((length - i) == 5 && isWan) {//万key = IUNIT[4];}else if((length - i) == 1) {//元key = IUNIT[0];}if((length - i)>1 && integers[i+1]!=0) {key += NUMBERS[0];}}chineseInteger.append(integers[i]==0?key:(NUMBERS[integers[i]]+IUNIT[length - i -1]));}return chineseInteger.toString();}/***  将小数部分转为大写的金额* @param decimals 小数部分的数字* @return*/private static String getChineseDecimal(int[] decimals) {StringBuffer chineseDecimal = new StringBuffer("");for(int i = 0;i<decimals.length;i++) {if(i == 3) {break;}chineseDecimal.append(decimals[i]==0?"":(NUMBERS[decimals[i]]+DUNIT[i]));}return chineseDecimal.toString();}/***  判断当前整数部分是否已经是达到【万】* @param integerStr  整数部分数字* @return*/private static boolean isWan5(String integerStr) {int length = integerStr.length();if(length > 4) {String subInteger = "";if(length > 8) {subInteger = integerStr.substring(length- 8,length -4);}else {subInteger = integerStr.substring(0,length - 4);}return Integer.parseInt(subInteger) > 0;}else {return false;}}// Testpublic static void main(String[] args) {String number = "12.56";System.out.println(number+": "+ConvertUpMoney.toChinese(number));number = "1234567890563886.123";System.out.println(number+": "+ConvertUpMoney.toChinese(number));number = "1600";System.out.println(number+": "+ConvertUpMoney.toChinese(number));number = "156,0";System.out.println(number+": "+ConvertUpMoney.toChinese(number));number = "-156,0";System.out.println(number+": "+ConvertUpMoney.toChinese(number));number = "0.12";System.out.println(number+": "+ConvertUpMoney.toChinese(number));number = "0.0";System.out.println(number+": "+ConvertUpMoney.toChinese(number));number = "01.12";System.out.println(number+": "+ConvertUpMoney.toChinese(number));number = "0125";System.out.println(number+": "+ConvertUpMoney.toChinese(number));number = "-0125";System.out.println(number+": "+ConvertUpMoney.toChinese(number));number = "sdw5655";System.out.println(number+": "+ConvertUpMoney.toChinese(number));System.out.println(null+": "+ConvertUpMoney.toChinese(null));}
}

【Java】将数字金额转换为大写中文金额相关推荐

  1. Java实现 “ 将数字金额转为大写中文金额 ”

    最困难的事情就是认识自己! 个人博客,欢迎访问! 前言: 输入数字金额参数,运行程序得到其对应的大写中文金额:例如:输入 12.56,输出 12.56 : 壹拾贰元伍角陆分:重点来了:本人亲测有效. ...

  2. java数字金额大写金额_Java实现 “ 将数字金额转为大写中文金额 ”

    前言: 输入数字金额参数,运行程序得到其对应的大写中文金额:例如:输入 12.56,输出 12.56 : 壹拾贰元伍角陆分:重点来了:本人亲测有效. 奉上代码: /** * @Title: Conve ...

  3. java 金额转中文_Java实现 将数字金额转为大写中文金额

    前言: 输入数字金额参数,运行程序得到其对应的大写中文金额:例如:输入 12.56,输出 12.56 : 壹拾贰元伍角陆分. 代码: /** * @Title: ConvertUpMoney * @D ...

  4. JS 实现数字转换为大写中文金额

    数字转换为大写中文金额 function convertCurrency(money) { //汉字的数字 var cnNums = new Array('零', '壹', '贰', '叁', '肆' ...

  5. 数字金额转换为大写人民币汉字

    // 数字金额转换为大写人民币汉字convertCurrency (money) {// 汉字的数字var cnNums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', ' ...

  6. JS将数字金额转换为大写人民币汉字

    转载自 qubernet 博客 JS将数字金额转换为大写人民币汉字 function convertCurrency(money) {//汉字的数字var cnNums = new Array('零' ...

  7. 浮点数转换为大写货币金额

    /*** 浮点数转换为大写货币金额* * @author Bobby* */ public class ConvertFloatNumToRMBFormat {private static Strin ...

  8. oracle人民币转大写,Oracle 小写金额转换为大写

    在开发EBS的合同报表打印的时候需要将小写金额转换为大写. 如下是本人自己写的转换函数. 主要思路:先获取小数点位置,在区分整数与小数点处理,根据位数和数字组合读取金额. 最后再处理特殊显示部分. / ...

  9. VB:将数字转换为大写中文

    方法1: 程序代码: Const strN = "零壹贰叁肆伍陆柒捌玖" Const strG = "拾佰仟万亿" Const intN = "012 ...

最新文章

  1. pandas使用query函数和sample函数、使用query函数筛选dataframe中的特定数据行并使用sample函数获取指定个数的随机抽样数据
  2. c#中ref与out的区别
  3. Selenium+Java+TestNG环境配置
  4. XML,Object,Json分析转换Xstream采用
  5. 超图桌面版创建基本三维对象(点、线、面、体、粒子系统)的基本操作
  6. 【深度学习】ResNet的思想
  7. Python学习笔记之函数式编程
  8. java安全编码指南之:输入注入injection
  9. LeetCode 101. 对称二叉树 思考分析
  10. webuploader
  11. Web前端实战:管理系统网页的初步设计
  12. 如何在word中批量编辑所有图片的大小?
  13. Testin云测:搜狐新闻客户端5.0能否承载张朝阳“个性化阅读”梦想
  14. 安卓ps2模拟器_安卓PS2模拟器评测:真魂斗罗,不卡完美运行
  15. watchfit会升级鸿蒙么,要点曝光:华为watchfit活力版质量好吗?主要的优势在哪里?...
  16. 数字型谜题或算法小节
  17. 【产品】产品原型设计工具 Axure 和 Mockplus 对比
  18. solar2 android,Solar2(太阳系行星2)
  19. (4.1.40.5)Android手势检测GestureDecetor详解
  20. 使用 Vanilla JavaScript 构建自定义 SPA 路由器

热门文章

  1. SpringBoot 整合 发送互亿无线短信验证码
  2. 2000-2021年中国科技统计年鉴(分省年度)面板数据
  3. 【笔记3-6】CS224N课程笔记 - RNN和语言模型
  4. php的redis单例模式
  5. IAR for ARM 无法烧写
  6. Github网站css加载不出来的处理方法
  7. 360手机卫士插件化RePlugin今日开源,官方全面解读
  8. qt中调用matlab生成的动态库
  9. Donald Knuth 传奇
  10. 判断一个用字符串表达的数字是否可以被整除