java数字金额大写金额_Java实现 “ 将数字金额转为大写中文金额 ”
前言:
输入数字金额参数,运行程序得到其对应的大写中文金额;例如:输入 12.56,输出 12.56 : 壹拾贰元伍角陆分;重点来了:本人亲测有效。
奉上代码:
/**
* @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
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
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
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;
}
}
// Test
public 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));
}
}
————————————————
版权声明:本文为CSDN博主「木子雷」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/feichitianxia/article/details/92801678
java数字金额大写金额_Java实现 “ 将数字金额转为大写中文金额 ”相关推荐
- java 金额转中文_Java实现 将数字金额转为大写中文金额
前言: 输入数字金额参数,运行程序得到其对应的大写中文金额:例如:输入 12.56,输出 12.56 : 壹拾贰元伍角陆分. 代码: /** * @Title: ConvertUpMoney * @D ...
- Java实现 “ 将数字金额转为大写中文金额 ”
最困难的事情就是认识自己! 个人博客,欢迎访问! 前言: 输入数字金额参数,运行程序得到其对应的大写中文金额:例如:输入 12.56,输出 12.56 : 壹拾贰元伍角陆分:重点来了:本人亲测有效. ...
- 【Java】将数字金额转换为大写中文金额
package com.ruoyi.test;import org.apache.commons.lang3.StringUtils;/*** @Title: ConvertUpMoney* @Des ...
- JS 实现数字转换为大写中文金额
数字转换为大写中文金额 function convertCurrency(money) { //汉字的数字 var cnNums = new Array('零', '壹', '贰', '叁', '肆' ...
- java 大写中文金额 转 数字
最近做解析描述时提取到金额字段后,需要将文本中的大写金额转换成数字,然而发现很多博客里的程序又问题,在亿和万级中,如果出现百十千等小单位就会出错,先算成小单位然后遇到大单位如万在乘以1000导致金额出 ...
- Java幸运数求和_Java实现 幸运数字
题目描述: 小雅同窗认为6,8是她的幸运数字,而其余数字均不是,一个幸运数是指在十进制表示下只含有幸运数字的数.给定你一个区间(a,b)a和b之间(其中包括a和b幸)运数的个数.java 输入描述: ...
- java实现 手写体识别_java手写体英文数字识别系统 识别预处理如何实现 采用什么语言比较好...
展开全部 转载 1 引言 手写体数字识别是文字识别中的一个研究课题,是多年来的研究热点,也是模62616964757a686964616fe4b893e5b19e31333337373638式识别领域 ...
- java输入一个数字输出_java 输入一个数字,反转输出这个数字的值(实现方法)
如下所示: package 第四天; import java.util.Scanner; public class 数字反转 { public static void main(String[] ar ...
- java课程设计 华容道_Java课设-数字华容道
#2019-2020学年第一学期Java课设 #数字华容道 ##一:团队成员介绍及任务分配 ####王鑫杰 201821123112 组长 dao模式结合数据库 登录验证 排行榜展示 ####林炜 2 ...
最新文章
- Redis为什么变慢了,来慢慢盘查?
- C#几种访问修饰符理解
- href可以请求后台么_href怎么进行传参
- mstem函数怎么定义_PYTHON--函数定义
- Node --- EventProxy的原理
- 网页字体设置你了解吗?
- 现代人必须掌握的成功学方法
- MySQL学习笔记:三种组内排序方法
- excel线性拟合的斜率_origin 线性拟合后,怎么看斜率等参数
- ec20 以太网_轩辕实验室:SOTIF:汽车以太网的容错能力测试(2)
- CentOS 7 VM虚拟机安装docker步骤
- java——集合详解
- 使用Microsoft Office Publisher制作海报Poster
- 2021年西式面点师(初级)考试题及西式面点师(初级)
- 访问局域网计算机切换用户,图解“访问局域网中的电脑时提示输入帐号和密码”...
- 中兴CS大赛推3G营销
- [Validation set: 'activiti-executable-process' | Problem: 'activiti-exclusive-gateway-condition-not-
- net-java-php-python-医药库存管理系统计算机毕业设计程序
- GPT-3让人怀疑人生!惊艳了世界!道翰天琼认知智能机器人api接口平台为您解密!
- 用Python试了试人脸识别