您的位置:首页 > 编程语言 > Java开发

JAVA数字大写金额转换

2015-09-15 00:00 591 查看
摘要: 初学Java写的。可以转换万亿以内的数字。写的如有问题。还请大家指出来

package day02;

import java.util.HashMap;
import java.util.Map.Entry;

public class Test2 {
private static HashMap<Long, Character> chineseNum = new HashMap<Long, Character>(); // 存储数字对应的中文
private final String[] UNIT = { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿","兆" };
private static HashMap<String, String> special = new HashMap<String, String>(); // 特殊情况
static {
chineseNum.put(new Long(0), '零');
chineseNum.put(new Long(1), '壹');
chineseNum.put(new Long(2), '贰');
chineseNum.put(new Long(3), '叁');
chineseNum.put(new Long(4), '肆');
chineseNum.put(new Long(5), '伍');
chineseNum.put(new Long(6), '陆');
chineseNum.put(new Long(7), '柒');
chineseNum.put(new Long(8), '捌');
chineseNum.put(new Long(9), '玖');
// 特殊情况
special.put("零拾", "零");
special.put("零佰", "零");
special.put("零仟", "零");
special.put("零万", "万");
special.put("零亿", "亿");
special.put("亿万", "亿");
special.put("零零", "零");
}

public static void main(String[] args) {
String money="1234567890123";
String str = new Test2().transformNumber(money);
System.out.println(money+" : "+str);
}

private String transformNumber(String str) {
long len = str.length(); // 获取字符的长度
if(len>13) throw new RuntimeException("金额过大,只能转换万亿以内的金额!");

char[] arr = str.toCharArray(); // 转成char数组
StringBuilder sb = new StringBuilder();
// 数字转换
for (int i = 0; i < arr.length; i++) {
sb.append(chineseNum.get(Long.parseLong(arr[i] + ""))); // 取得每一位的数字元素,对应集合中的中文汉字
}
int temp = 1; // 记录循环到了哪一位
for (long i = (len - 1); i > 0; i--) {
sb.insert((int) i, UNIT[temp]); // unit[temp] 表示位数 十位 百位 千位...
temp = (temp == 8) ? 1 : temp + 1; // 核心代码.到亿位之后重新循环
}
for (Entry<String, String> entry : special.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
while (sb.indexOf(key) != -1) {
sb.replace(sb.indexOf(key), sb.indexOf(key) + 2, value); //替换出现的特殊情况
}
}
//特殊数字:如5005。会出现漏替换的情况。则要将【零零】替换为零
while (sb.indexOf("零零") != -1) {
sb.replace(sb.indexOf("零零"), sb.indexOf("零零") + 2, "零");
}
// 如果最后一位为零。则去除
if (sb.substring(sb.length() - 1, sb.length()).equals("零")) {
sb = new StringBuilder(sb.substring(0, sb.length() - 1));
}
return sb.toString();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息