private static final Map<Long, Character> nums = new HashMap<Long, Character>();
public static final int MAX_LENGTH = 20;
private static final String OVER_FLOW = "OVERFLOW";
static {
nums.put(0l, '零');
nums.put(1l, '壹');
nums.put(2l, '贰');
nums.put(3l, '叁');
nums.put(4l, '肆');
nums.put(5l, '伍');
nums.put(6l, '陆');
nums.put(7l, '柒');
nums.put(8l, '捌');
nums.put(9l, '玖');
nums.put(10l, '拾');
nums.put(100l, '佰');
nums.put(1000l, '仟');
nums.put(10000l, '万');
nums.put(100000000l, '亿');
nums.put(1000000000000l, '兆');
nums.put(10000000000000000l, '京');
}
/**
* 转换为中文大写数字,万亿级转换,最多可到<br/>
* 九千九百九十九京九千九百九十九兆九千九百九十九亿<br/>
* 九千九百九十九万九千九百九十九元九角九分。<br/>
* 必须是非科学计数法的数字。
*
* @param money
* @return
*/
public static String getChineseStyleMoney(double money) {
return getChineseStyleMoney(String.valueOf(money));
}
/**
* 转换为中文大写数字,万亿级转换,最多可到<br/>
* 九千九百九十九京九千九百九十九兆九千九百九十九亿<br/>
* 九千九百九十九万九千九百九十九元九角九分。<br/>
* 必须是非科学计数法的数字。
*
* @param money
* @return 中文大写数字表示的金额,如果超过额定大小,将返回<code>OVER_FLOW</code>
*/
public static String getChineseStyleMoney(String money) {
int index = money.indexOf(".");
String strNum = index > 0 ? money.substring(0, index) : money;
if (strNum.length() > MAX_LENGTH) {
return OVER_FLOW;
}
StringBuffer sb = new StringBuffer(getInteger(strNum));
if (sb.length() > 0) {
sb.append("圆");
}
if (index > 0) {
String pointNum = money.substring(index);
char c = pointNum.charAt(1);
if (c - 48 != 0) {
sb.append(nums.get(c - 48l)).append("角");
}
if (pointNum.length() >= 3) {
c = pointNum.charAt(2);
if (c - 48 != 0) {
sb.append(nums.get(c - 48l)).append("分");
}
}
} else {
if (sb.length() == 0) {
sb.append(nums.get(0l));
} else {
sb.append("整");
}
}
return sb.toString();
}
/**
* 转换整数。
*
* @return
*/
private static String getInteger(String strNum) {
int size = strNum.length() % 4 == 0 ? strNum.length() / 4 : strNum
.length() / 4 + 1;
String[] parts = new String[size == 0 ? 1 : size];
StringBuffer sb = new StringBuffer();
for (int i = 0; i < size; i++) {
int endIndex = strNum.length() - (size - i) * 4 + 4;
int startIndex = endIndex - 4 > 0 ? endIndex - 4 : 0;
parts[i] = strNum.substring(startIndex, endIndex);
int part = Integer.parseInt(parts[i]);
// @@ 如果sb长度为零表示前面还没有数字,这时如果part是零,就略过。
if (sb.length() == 0 && part == 0) {
continue;
}
// @@ 如果这部分的位数≤3,并且总位数大于0,表示前面还有数字,那么
// @@ 在这部分数字前面要加“零”,如10900,被分成两部分,“1”和“0900”,
// @@ 转换后分别是“壹万”和“玖佰”,那么应该要在这两部分之间加上一个“零”
if (part > 0 && part <= 999 && sb.length() > 0
&& sb.toString().endsWith(nums.get(0l).toString()) == false) {
sb.append(nums.get(0l));
}
sb.append(getChineseStyleInteger(part));
int powArg = (size - i) * 2 + 2;
if (part != 0) {
if (powArg >= 5 && powArg <= 7) {
sb.append(nums.get(Double.valueOf(Math.pow(10, 4))
.longValue()));
} else if (powArg >= 8 && powArg <= 9) {
sb.append(nums.get(Double.valueOf(Math.pow(10, 8))
.longValue()));
} else if (powArg >= 10 && powArg <= 11) {
sb.append(nums.get(Double.valueOf(Math.pow(10, 12))
.longValue()));
} else if (powArg >= 12 && powArg <= 13) {
sb.append(nums.get(Double.valueOf(Math.pow(10, 16))
.longValue()));
}
}
// @@ 这部分的数字以‘0’结尾,在转换后要加一个“零”。
if (parts[i].endsWith("0") && i != size - 1
&& sb.toString().endsWith(nums.get(0l).toString()) == false) {
sb.append(nums.get(0l));
}
}
return sb.toString();
}
/**
* 转换小数部分。
*
* @param sub
* @return
*/
private static String getFloat(String sub) {
StringBuffer sb = new StringBuffer();
sb.append(nums.get(0l)).append("点");
for (int i = 1; i < sub.length(); i++) {
char c = sub.charAt(i);
sb.append(nums.get(c - 48l));
}
return sb.toString();
}
分享到:
相关推荐
Java 类金额转换成大写 在 Java 编程语言中,金额转换成大写是非常有用的功能,特别是在财务、银行、电子商务等领域中。下面我们来详细介绍如何使用 Java 实现金额转换成大写的功能。 实例代码分析 首先,我们来...
Java 中实现数字金额到中文大写字符的转换是指将阿拉伯数字转换成中文大写的过程。本文将详细介绍 Java 实现数字金额到中文大写字符的转换的知识点。 知识点一: 数字金额到中文大写字符的转换的需求 在实际应用中...
### 人民币小写金额转大写金额(Java版) #### 概述 本文将详细介绍一个Java程序,该程序用于将小写的人民币金额转换为大写形式。此转换主要用于财务、会计和其他正式场合,在这些场合中,大写金额是标准且必须的...
输入字符,通过正则验证是否为金额不超过万亿精确到小数点后两位,然后将数字转换为大写 包括后台java正则验证及前台js验证 请输入一个数字(精确到小数点后两位): fdsa54325.54 fdsa54325.54 false 请输入一个...
可以把金额数值转为财务上常用的金额大写,如100元 转为壹佰园
在Java编程中,将金额的阿拉伯数字转换为中文汉字大写是常见的财务处理需求,主要用于防止数字篡改,增加财务数据的安全性和准确性。这个过程通常称为金额数字化,它涉及到将小数点、整数和小数部分分别转换,并且...
本文将详细介绍如何使用 Java 实现人民币金额数字转换成大写的解决方案。 Java 中的 NumberFormat 类 在 Java 中,NumberFormat 类是用于格式化数字的类。它提供了多种格式化方式,例如整数、浮点数、货币等。...
例如:将30825.13 转换成 叁万零捌佰贰拾伍元壹角叁分
用JAVA书写的一个大写金额转化为小写金额的类
JAVA实现阿拉伯数字金额转汉语大写是指使用JAVA语言将阿拉伯数字金额转换为汉语大写格式的过程。该过程主要涉及到数字金额的处理和汉语大写格式的转换。 在该过程中,需要定义两个数组upChinese和upChinese2,分别...
人民币金额大写: ${your_amount_variable}"/> ``` 在这个例子中,`${your_amount_variable}`是代表金额的Java表达式,`<money:toRMB>`标签会将其转换为大写并显示在网页上。 总的来说,这个项目展示了如何结合Java...
将数字金额转换为大写汉字的java工具类,方便财务相关开发转换金额。
Java 实现数字转换人民币中文大写工具是指使用 Java 语言将数字转换为人民币中文大写格式的工具。该工具具有很高的实用价值,特别是在人事业务系统开发中,经常需要将数字转换为大写,以便于报表打印和日常业务处理...
最好放在公共方法里,以便调用,定义String 类型接受返回的金额,调用参数为需要传入的金额
金额转换成大写
将数字转为中文金额的大写方式(Java版) 博文链接:https://lovinchan.iteye.com/blog/202768
小数都可以,这个真不错,赶紧下载来看看吧
将小写金额转换为大写金额
根据给定的文件信息,我们可以总结出以下有关“Java金额转大写”的知识点: ### 一、背景介绍 在财务处理、票据填写等场景中,经常需要将阿拉伯数字表示的金额转换为汉字大写形式。这不仅可以提高正式文档的专业性...
本文将详细讲解如何在Java中实现金额转换大写的操作。 首先,我们需要了解金额数字到大写汉字的转换规则。在中国,金额的大写通常由以下汉字组成:零(0)、壹(1)、贰(2)、叁(3)、肆(4)、伍(5)、陆(6)...