【Java】将数字金额转换为大写中文金额
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】将数字金额转换为大写中文金额相关推荐
- Java实现 “ 将数字金额转为大写中文金额 ”
最困难的事情就是认识自己! 个人博客,欢迎访问! 前言: 输入数字金额参数,运行程序得到其对应的大写中文金额:例如:输入 12.56,输出 12.56 : 壹拾贰元伍角陆分:重点来了:本人亲测有效. ...
- java数字金额大写金额_Java实现 “ 将数字金额转为大写中文金额 ”
前言: 输入数字金额参数,运行程序得到其对应的大写中文金额:例如:输入 12.56,输出 12.56 : 壹拾贰元伍角陆分:重点来了:本人亲测有效. 奉上代码: /** * @Title: Conve ...
- java 金额转中文_Java实现 将数字金额转为大写中文金额
前言: 输入数字金额参数,运行程序得到其对应的大写中文金额:例如:输入 12.56,输出 12.56 : 壹拾贰元伍角陆分. 代码: /** * @Title: ConvertUpMoney * @D ...
- JS 实现数字转换为大写中文金额
数字转换为大写中文金额 function convertCurrency(money) { //汉字的数字 var cnNums = new Array('零', '壹', '贰', '叁', '肆' ...
- 数字金额转换为大写人民币汉字
// 数字金额转换为大写人民币汉字convertCurrency (money) {// 汉字的数字var cnNums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', ' ...
- JS将数字金额转换为大写人民币汉字
转载自 qubernet 博客 JS将数字金额转换为大写人民币汉字 function convertCurrency(money) {//汉字的数字var cnNums = new Array('零' ...
- 浮点数转换为大写货币金额
/*** 浮点数转换为大写货币金额* * @author Bobby* */ public class ConvertFloatNumToRMBFormat {private static Strin ...
- oracle人民币转大写,Oracle 小写金额转换为大写
在开发EBS的合同报表打印的时候需要将小写金额转换为大写. 如下是本人自己写的转换函数. 主要思路:先获取小数点位置,在区分整数与小数点处理,根据位数和数字组合读取金额. 最后再处理特殊显示部分. / ...
- VB:将数字转换为大写中文
方法1: 程序代码: Const strN = "零壹贰叁肆伍陆柒捌玖" Const strG = "拾佰仟万亿" Const intN = "012 ...
最新文章
- pandas使用query函数和sample函数、使用query函数筛选dataframe中的特定数据行并使用sample函数获取指定个数的随机抽样数据
- c#中ref与out的区别
- Selenium+Java+TestNG环境配置
- XML,Object,Json分析转换Xstream采用
- 超图桌面版创建基本三维对象(点、线、面、体、粒子系统)的基本操作
- 【深度学习】ResNet的思想
- Python学习笔记之函数式编程
- java安全编码指南之:输入注入injection
- LeetCode 101. 对称二叉树 思考分析
- webuploader
- Web前端实战:管理系统网页的初步设计
- 如何在word中批量编辑所有图片的大小?
- Testin云测:搜狐新闻客户端5.0能否承载张朝阳“个性化阅读”梦想
- 安卓ps2模拟器_安卓PS2模拟器评测:真魂斗罗,不卡完美运行
- watchfit会升级鸿蒙么,要点曝光:华为watchfit活力版质量好吗?主要的优势在哪里?...
- 数字型谜题或算法小节
- 【产品】产品原型设计工具 Axure 和 Mockplus 对比
- solar2 android,Solar2(太阳系行星2)
- (4.1.40.5)Android手势检测GestureDecetor详解
- 使用 Vanilla JavaScript 构建自定义 SPA 路由器