征集人民币大小写转换思路(要求在万亿级别) 本帖最后由 w5644266 于 2009-09-21 17:10:07 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 大写的汉字应该就10个数字+5个级别=15个吧定义好然后replace好了 万亿一般念“兆”:import java.math.BigDecimal;import java.math.BigInteger;/** * 将金额转换为人民币大写的工具类。 */public final class RMBChineseNumerals { /** * 数字 */ private static final char[] DIGITS = new char[] { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; /** * 单位1 */ private static final String[] PREFIX = new String[] { "", "拾", "佰", "仟" }; /** * 单位2 */ private static final String[] UNITS = new String[] { "", "萬", "亿", "兆", "京" }; /** * 小数单位 */ private static final String FRACTIONAL_UNITS = "角分厘毫"; /** * 不需要实例化。 */ private RMBChineseNumerals() { } /** * 将人民币金额转换为大写。 * * @param amount * 金额 * @return 大写 */ public static final String toChineseNumerals(BigDecimal amount) { if (amount == null) { return ""; } // 确定正负数 switch (amount.signum()) { case -1: return "负" + toChineseNumerals(amount.abs()); case 0: return "零圆"; default: } // 小数部分超过支持的小数位数,需要四舍五入 if (amount.scale() > FRACTIONAL_UNITS.length()) { amount = amount.setScale(FRACTIONAL_UNITS.length(), BigDecimal.ROUND_HALF_UP); } // 字符串缓冲 StringBuilder buff = new StringBuilder(amount.precision() * 2 + 5); /* -------------------- 整数部分 -------------------- */ // 整数 BigInteger integer = amount.toBigInteger(); // 整数文字 String intText = integer.toString(); // 整数长度 int intLength = intText.length(); // 刚才输出的是否是0 boolean lastZero = true; String lastNonZeroUnit = null; for (int i = 0; i < intLength; i++) { // 位数(个位为0,十位为1) int pos = intLength - i - 1; // 数字 int digit = intText.charAt(i) - '0'; // 数字名称 char digitName = DIGITS[digit]; // 前缀 String prefix = PREFIX[pos % PREFIX.length]; // 进位 int step = pos / PREFIX.length; // 单位 String unit = UNITS[step]; if (digit == 0) { if (!lastZero) { buff.append(digitName); } lastZero = true; } else { if (!(digit == 1 && "拾".equals(prefix))) { buff.append(digitName); } buff.append(prefix); lastNonZeroUnit = unit; lastZero = false; } if (pos % PREFIX.length == 0 && unit.equals(lastNonZeroUnit)) { if (lastZero) { buff.deleteCharAt(buff.length() - 1); lastZero = false; } buff.append(unit); } } if (buff.length() > 0) { if (buff.charAt(buff.length() - 1) == '零') { buff.deleteCharAt(buff.length() - 1); } buff.append("圆"); } /* -------------------- 小数部分 -------------------- */ // 小数部分,去除多余的零 BigDecimal fraction = amount.subtract(new BigDecimal(integer)); // 小数文字 String fracText = fraction.toString().replaceFirst("0.", ""); lastZero = false; for (int i = 0; i < fracText.length(); i++) { // 数字 int digit = fracText.charAt(i) - '0'; if (digit == 0 && lastZero) { continue; } // 数字名称 char digitName = DIGITS[digit]; // 单位 char unit = FRACTIONAL_UNITS.charAt(i); if (digit != 0) { if (lastZero) { buff.append("零"); } buff.append(digitName).append(unit); } lastZero = digit == 0; } return buff.toString().replaceFirst("^零", ""); }} 小数部分不精确,我拿了一个值做了下测试:toChineseNumerals(new BigDecimal(1000000052622525.1)),结果小数部分显示的是125 问题解决了,new BigDecimal("1000000052622525.1"),换个构造函数就可以了... import java.util.*;import java.util.regex.*;class CurrencyUtil { public static Pattern CURRENCY = Pattern .compile("^(\\d{1,13}+)(.\\d{1,2}+)?+$"); private static String[] DECIMAL = { "角", "分" }; private static String[] UNIT = { "元", "拾", "佰", "仟", "万", "亿" }; private static String[] DIGIT = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; private static String formatNote(long n) { if (n == 0L) { return ""; } int i = 0; StringBuilder sb = new StringBuilder(); while (n != 0L) { if (n % 10L != 0) { switch (i) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: if (i == 8 && sb.length() > 0 && contain(UNIT, String.valueOf(sb.charAt(0)))) { sb.replace(0, 1, UNIT[5]); } else { sb.insert(0, UNIT[i == 8 ? 5 : i > 8 ? i - 8 : i > 4 ? i - 4 : i]); } i++; } sb.insert(0, DIGIT[(int) (n % 10L)]); } else { if (sb.length() > 0 && !contain(UNIT, String.valueOf(sb.charAt(0))) && sb.indexOf(DIGIT[0]) != 0) { sb.insert(0, DIGIT[0]); } if (i == 4) { sb.insert(0, UNIT[4]); } if (i == 8 && contain(UNIT, String.valueOf(sb.charAt(0)))) { sb.replace(0, 1, UNIT[5]); } else if (i == 8) { sb.insert(0, UNIT[5]); } i++; } n = n / 10L; } if (!UNIT[0].equals(String.valueOf(sb.charAt(sb.length() - 1)))) { sb.append(UNIT[0]); } return sb.toString(); } private static String formatChange(String str) { if (str == null || str.equals("")) { return ""; } StringBuilder sb = new StringBuilder(str); int length = sb.length(); int jiao = sb.charAt(0) - '0'; int fen = -1; sb.replace(0, 1, DIGIT[jiao]); if (length > 1) { fen = sb.charAt(1) - '0'; sb.replace(1, 2, DIGIT[fen]); sb.insert(1, DECIMAL[0]); sb.append(DECIMAL[1]); } else { sb.append(DECIMAL[0]); } return sb.toString(); } private static boolean contain(String[] arr, String str) { if (str == null || arr == null || arr.length == 0) { return false; } for (String s : arr) { if (str.equals(s)) { return true; } } return false; } public static String format(String money) { if (money == null) { return null; } if (!CURRENCY.matcher(money).matches()) { return money + " 并非正确的货币格式,抑或是其长度超过了可接受的范围"; } String result = null; int dotIndex = money.indexOf("."); if (dotIndex != -1) { String note = money.substring(0, dotIndex); String change = money.substring(dotIndex + 1); result = formatNote(Long.parseLong(note)) + formatChange(change); } else { result = formatNote(Long.parseLong(money)); } return result; } public static void main(String[] args) { System.out.println(CurrencyUtil.format("1")); // 壹元 System.out.println(CurrencyUtil.format("12")); // 壹拾贰元 System.out.println(CurrencyUtil.format("123")); // 壹佰贰拾叁元 System.out.println(CurrencyUtil.format("1234")); // 壹仟贰佰叁拾肆元 System.out.println(CurrencyUtil.format("12345")); // 壹万贰仟叁佰肆拾伍元 System.out.println(CurrencyUtil.format("123456")); // 壹拾贰万叁仟肆佰伍拾陆元 System.out.println(CurrencyUtil.format("1234567")); // 壹佰贰拾叁万肆仟伍佰陆拾柒元 System.out.println(CurrencyUtil.format("12345678")); // 壹仟贰佰叁拾肆万伍仟陆佰柒拾捌元 System.out.println(CurrencyUtil.format("123456789")); // 壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元 System.out.println(CurrencyUtil.format("1023456789")); // 壹拾亿零贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元 System.out.println(CurrencyUtil.format("10023456789")); // 壹佰亿零贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元 System.out.println(CurrencyUtil.format("100023456789")); // 壹仟亿零贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元 System.out.println(CurrencyUtil.format("1000023456789.12")); // 壹万亿零贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元壹角贰分 }}欢迎访问我的空间,希望多提宝贵意见http://user.qzone.qq.com/1037849661?ptlang=2052 这是我的TestCase public final void testToChineseNumerals() { assertEquals("零圆", toChineseNumerals(BigDecimal.valueOf(0))); assertEquals("壹仟圆", toChineseNumerals(BigDecimal.valueOf(1000))); assertEquals("壹仟零肆拾捌圆", toChineseNumerals(BigDecimal.valueOf(1048))); assertEquals("壹仟壹佰零捌圆", toChineseNumerals(BigDecimal.valueOf(1108))); assertEquals("壹萬圆", toChineseNumerals(BigDecimal.valueOf(10000))); assertEquals("壹萬零壹圆", toChineseNumerals(BigDecimal.valueOf(10001))); assertEquals("玖佰玖拾玖萬玖仟玖佰玖拾玖圆", toChineseNumerals(BigDecimal .valueOf(9999999))); assertEquals("玖亿零玖佰零玖萬零玖佰零玖圆", toChineseNumerals(BigDecimal .valueOf(909090909))); assertEquals("叁佰零肆亿零伍佰零陆萬零柒佰捌拾玖圆", toChineseNumerals(BigDecimal .valueOf(30405060789L))); assertEquals("壹亿贰仟叁佰肆拾伍萬陆仟柒佰捌拾玖圆", toChineseNumerals(BigDecimal .valueOf(123456789))); assertEquals("拾贰亿叁仟肆佰伍拾陆萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal .valueOf(1234567890))); assertEquals("拾亿零肆佰伍拾陆萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal .valueOf(1004567890))); assertEquals("拾亿零肆佰伍拾萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal .valueOf(1004507890))); assertEquals("叁仟肆佰拾亿零肆佰萬零玖拾圆", toChineseNumerals(BigDecimal .valueOf(341004000090L))); assertEquals("叁仟肆佰拾亿零肆佰伍拾萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal .valueOf(341004507890L))); assertEquals("拾亿零柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal.valueOf(1000007890))); assertEquals("负拾贰亿叁仟肆佰伍拾陆萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal .valueOf(-1234567890))); assertEquals("负拾亿零肆佰伍拾萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal .valueOf(-1004507890))); assertEquals("壹圆零伍分", toChineseNumerals(new BigDecimal("1.05"))); assertEquals("伍分", toChineseNumerals(new BigDecimal("0.05"))); assertEquals("伍角", toChineseNumerals(new BigDecimal("0.5"))); assertEquals("伍角", toChineseNumerals(new BigDecimal("0.500"))); assertEquals("伍角零肆毫", toChineseNumerals(new BigDecimal("0.5004"))); assertEquals("伍角肆分叁厘", toChineseNumerals(new BigDecimal("0.543"))); assertEquals("壹圆伍角", toChineseNumerals(new BigDecimal("1.5"))); assertEquals("壹圆伍角", toChineseNumerals(new BigDecimal("1.500"))); assertEquals("壹圆伍角肆分叁厘", toChineseNumerals(new BigDecimal("1.543"))); assertEquals("玖佰玖拾玖萬玖仟玖佰玖拾玖圆玖角玖分玖厘玖毫", toChineseNumerals(new BigDecimal( "9999999.9999"))); assertEquals("玖佰玖拾玖萬玖仟玖佰玖拾玖圆玖角玖分玖厘玖毫", toChineseNumerals(new BigDecimal( "9999999.99991"))); assertEquals("壹仟萬圆", toChineseNumerals(new BigDecimal("9999999.99999"))); assertEquals("负壹仟萬圆", toChineseNumerals(new BigDecimal("-9999999.99999"))); } 我想上面的代码应该是你较早的作品吧...一个方法就搞定了.貌似有些东西是可以抽取的哦...非常高兴CSDN上有一群你们这样的人,谢谢你们的不吝赐教. public final void testToChineseNumerals() { assertEquals("零圆", toChineseNumerals(BigDecimal.valueOf(0))); assertEquals("壹仟圆", toChineseNumerals(BigDecimal.valueOf(1000))); assertEquals("壹仟零肆拾捌圆", toChineseNumerals(BigDecimal.valueOf(1048))); assertEquals("壹仟壹佰零捌圆", toChineseNumerals(BigDecimal.valueOf(1108))); assertEquals("壹萬圆", toChineseNumerals(BigDecimal.valueOf(10000))); assertEquals("壹萬零壹圆", toChineseNumerals(BigDecimal.valueOf(10001))); assertEquals("玖佰玖拾玖萬玖仟玖佰玖拾玖圆", toChineseNumerals(BigDecimal .valueOf(9999999))); assertEquals("玖亿零玖佰零玖萬零玖佰零玖圆", toChineseNumerals(BigDecimal .valueOf(909090909))); assertEquals("叁佰零肆亿零伍佰零陆萬零柒佰捌拾玖圆", toChineseNumerals(BigDecimal .valueOf(30405060789L))); assertEquals("壹亿贰仟叁佰肆拾伍萬陆仟柒佰捌拾玖圆", toChineseNumerals(BigDecimal .valueOf(123456789))); assertEquals("拾贰亿叁仟肆佰伍拾陆萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal .valueOf(1234567890))); assertEquals("拾亿零肆佰伍拾陆萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal .valueOf(1004567890))); assertEquals("拾亿零肆佰伍拾萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal .valueOf(1004507890))); assertEquals("叁仟肆佰拾亿零肆佰萬零玖拾圆", toChineseNumerals(BigDecimal .valueOf(341004000090L))); assertEquals("叁仟肆佰拾亿零肆佰伍拾萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal .valueOf(341004507890L))); assertEquals("拾亿零柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal.valueOf(1000007890))); assertEquals("负拾贰亿叁仟肆佰伍拾陆萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal .valueOf(-1234567890))); assertEquals("负拾亿零肆佰伍拾萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal .valueOf(-1004507890))); assertEquals("壹圆零伍分", toChineseNumerals(new BigDecimal("1.05"))); assertEquals("伍分", toChineseNumerals(new BigDecimal("0.05"))); assertEquals("伍角", toChineseNumerals(new BigDecimal("0.5"))); assertEquals("伍角", toChineseNumerals(new BigDecimal("0.500"))); assertEquals("伍角零肆毫", toChineseNumerals(new BigDecimal("0.5004"))); assertEquals("伍角肆分叁厘", toChineseNumerals(new BigDecimal("0.543"))); assertEquals("壹圆伍角", toChineseNumerals(new BigDecimal("1.5"))); assertEquals("壹圆伍角", toChineseNumerals(new BigDecimal("1.500"))); assertEquals("壹圆伍角肆分叁厘", toChineseNumerals(new BigDecimal("1.543"))); assertEquals("玖佰玖拾玖萬玖仟玖佰玖拾玖圆玖角玖分玖厘玖毫", toChineseNumerals(new BigDecimal( "9999999.9999"))); assertEquals("玖佰玖拾玖萬玖仟玖佰玖拾玖圆玖角玖分玖厘玖毫", toChineseNumerals(new BigDecimal( "9999999.99991"))); assertEquals("壹仟萬圆", toChineseNumerals(new BigDecimal("9999999.99999"))); assertEquals("负壹仟萬圆", toChineseNumerals(new BigDecimal("-9999999.99999"))); } org.dom4j.*的问题 关于ip的问题 this都有哪些用处啊? JDBC连接数据库的问题 关于jdom的问题 请大家帮忙看看 请大家帮我看看这个java题那里错了 新手求教 如何用程序来模拟这样的猜数字游戏?多谢 关于jade的安装? 多态问题~~~~~困扰我好几天了,大侠帮忙吧~~ 网络传输应该用什么方法
import java.math.BigInteger;/**
* 将金额转换为人民币大写的工具类。
*/
public final class RMBChineseNumerals { /**
* 数字
*/
private static final char[] DIGITS = new char[] {
'零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'
}; /**
* 单位1
*/
private static final String[] PREFIX = new String[] {
"", "拾", "佰", "仟"
}; /**
* 单位2
*/
private static final String[] UNITS = new String[] {
"", "萬", "亿", "兆", "京"
}; /**
* 小数单位
*/
private static final String FRACTIONAL_UNITS = "角分厘毫"; /**
* 不需要实例化。
*/
private RMBChineseNumerals() {
} /**
* 将人民币金额转换为大写。
*
* @param amount
* 金额
* @return 大写
*/
public static final String toChineseNumerals(BigDecimal amount) {
if (amount == null) {
return "";
} // 确定正负数
switch (amount.signum()) {
case -1:
return "负" + toChineseNumerals(amount.abs());
case 0:
return "零圆";
default:
} // 小数部分超过支持的小数位数,需要四舍五入
if (amount.scale() > FRACTIONAL_UNITS.length()) {
amount = amount.setScale(FRACTIONAL_UNITS.length(),
BigDecimal.ROUND_HALF_UP);
} // 字符串缓冲
StringBuilder buff = new StringBuilder(amount.precision() * 2 + 5); /* -------------------- 整数部分 -------------------- */ // 整数
BigInteger integer = amount.toBigInteger();
// 整数文字
String intText = integer.toString();
// 整数长度
int intLength = intText.length(); // 刚才输出的是否是0
boolean lastZero = true;
String lastNonZeroUnit = null;
for (int i = 0; i < intLength; i++) {
// 位数(个位为0,十位为1)
int pos = intLength - i - 1;
// 数字
int digit = intText.charAt(i) - '0';
// 数字名称
char digitName = DIGITS[digit];
// 前缀
String prefix = PREFIX[pos % PREFIX.length];
// 进位
int step = pos / PREFIX.length;
// 单位
String unit = UNITS[step]; if (digit == 0) {
if (!lastZero) {
buff.append(digitName);
}
lastZero = true;
} else {
if (!(digit == 1 && "拾".equals(prefix))) {
buff.append(digitName);
}
buff.append(prefix);
lastNonZeroUnit = unit;
lastZero = false;
} if (pos % PREFIX.length == 0 && unit.equals(lastNonZeroUnit)) {
if (lastZero) {
buff.deleteCharAt(buff.length() - 1);
lastZero = false;
}
buff.append(unit);
}
} if (buff.length() > 0) {
if (buff.charAt(buff.length() - 1) == '零') {
buff.deleteCharAt(buff.length() - 1);
} buff.append("圆");
} /* -------------------- 小数部分 -------------------- */ // 小数部分,去除多余的零
BigDecimal fraction = amount.subtract(new BigDecimal(integer));
// 小数文字
String fracText = fraction.toString().replaceFirst("0.", ""); lastZero = false;
for (int i = 0; i < fracText.length(); i++) {
// 数字
int digit = fracText.charAt(i) - '0';
if (digit == 0 && lastZero) {
continue;
}
// 数字名称
char digitName = DIGITS[digit];
// 单位
char unit = FRACTIONAL_UNITS.charAt(i); if (digit != 0) {
if (lastZero) {
buff.append("零");
}
buff.append(digitName).append(unit);
} lastZero = digit == 0;
} return buff.toString().replaceFirst("^零", "");
}
}
import java.util.*;
import java.util.regex.*;class CurrencyUtil { public static Pattern CURRENCY = Pattern
.compile("^(\\d{1,13}+)(.\\d{1,2}+)?+$"); private static String[] DECIMAL = { "角", "分" };
private static String[] UNIT = { "元", "拾", "佰", "仟", "万", "亿" };
private static String[] DIGIT = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒",
"捌", "玖" }; private static String formatNote(long n) {
if (n == 0L) {
return "";
} int i = 0;
StringBuilder sb = new StringBuilder(); while (n != 0L) {
if (n % 10L != 0) {
switch (i) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
if (i == 8 && sb.length() > 0
&& contain(UNIT, String.valueOf(sb.charAt(0)))) {
sb.replace(0, 1, UNIT[5]);
} else {
sb.insert(0, UNIT[i == 8 ? 5 : i > 8 ? i - 8
: i > 4 ? i - 4 : i]);
}
i++;
}
sb.insert(0, DIGIT[(int) (n % 10L)]);
} else {
if (sb.length() > 0
&& !contain(UNIT, String.valueOf(sb.charAt(0)))
&& sb.indexOf(DIGIT[0]) != 0) {
sb.insert(0, DIGIT[0]);
}
if (i == 4) {
sb.insert(0, UNIT[4]);
}
if (i == 8 && contain(UNIT, String.valueOf(sb.charAt(0)))) {
sb.replace(0, 1, UNIT[5]);
} else if (i == 8) {
sb.insert(0, UNIT[5]);
}
i++;
}
n = n / 10L;
}
if (!UNIT[0].equals(String.valueOf(sb.charAt(sb.length() - 1)))) {
sb.append(UNIT[0]);
} return sb.toString();
} private static String formatChange(String str) {
if (str == null || str.equals("")) {
return "";
} StringBuilder sb = new StringBuilder(str);
int length = sb.length();
int jiao = sb.charAt(0) - '0';
int fen = -1; sb.replace(0, 1, DIGIT[jiao]); if (length > 1) {
fen = sb.charAt(1) - '0';
sb.replace(1, 2, DIGIT[fen]);
sb.insert(1, DECIMAL[0]);
sb.append(DECIMAL[1]);
} else {
sb.append(DECIMAL[0]);
} return sb.toString();
} private static boolean contain(String[] arr, String str) {
if (str == null || arr == null || arr.length == 0) {
return false;
}
for (String s : arr) {
if (str.equals(s)) {
return true;
}
}
return false;
} public static String format(String money) {
if (money == null) {
return null;
}
if (!CURRENCY.matcher(money).matches()) {
return money + " 并非正确的货币格式,抑或是其长度超过了可接受的范围";
}
String result = null;
int dotIndex = money.indexOf(".");
if (dotIndex != -1) {
String note = money.substring(0, dotIndex);
String change = money.substring(dotIndex + 1);
result = formatNote(Long.parseLong(note)) + formatChange(change);
} else {
result = formatNote(Long.parseLong(money));
}
return result;
} public static void main(String[] args) {
System.out.println(CurrencyUtil.format("1")); // 壹元
System.out.println(CurrencyUtil.format("12")); // 壹拾贰元
System.out.println(CurrencyUtil.format("123")); // 壹佰贰拾叁元
System.out.println(CurrencyUtil.format("1234")); // 壹仟贰佰叁拾肆元
System.out.println(CurrencyUtil.format("12345")); // 壹万贰仟叁佰肆拾伍元
System.out.println(CurrencyUtil.format("123456")); // 壹拾贰万叁仟肆佰伍拾陆元
System.out.println(CurrencyUtil.format("1234567")); // 壹佰贰拾叁万肆仟伍佰陆拾柒元
System.out.println(CurrencyUtil.format("12345678")); // 壹仟贰佰叁拾肆万伍仟陆佰柒拾捌元
System.out.println(CurrencyUtil.format("123456789")); // 壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元
System.out.println(CurrencyUtil.format("1023456789")); // 壹拾亿零贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元
System.out.println(CurrencyUtil.format("10023456789")); // 壹佰亿零贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元
System.out.println(CurrencyUtil.format("100023456789")); // 壹仟亿零贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元
System.out.println(CurrencyUtil.format("1000023456789.12")); // 壹万亿零贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元壹角贰分
}
}
欢迎访问我的空间,希望多提宝贵意见
http://user.qzone.qq.com/1037849661?ptlang=2052
这是我的TestCase
public final void testToChineseNumerals() {
assertEquals("零圆", toChineseNumerals(BigDecimal.valueOf(0)));
assertEquals("壹仟圆", toChineseNumerals(BigDecimal.valueOf(1000)));
assertEquals("壹仟零肆拾捌圆", toChineseNumerals(BigDecimal.valueOf(1048)));
assertEquals("壹仟壹佰零捌圆", toChineseNumerals(BigDecimal.valueOf(1108)));
assertEquals("壹萬圆", toChineseNumerals(BigDecimal.valueOf(10000)));
assertEquals("壹萬零壹圆", toChineseNumerals(BigDecimal.valueOf(10001)));
assertEquals("玖佰玖拾玖萬玖仟玖佰玖拾玖圆", toChineseNumerals(BigDecimal
.valueOf(9999999)));
assertEquals("玖亿零玖佰零玖萬零玖佰零玖圆", toChineseNumerals(BigDecimal
.valueOf(909090909)));
assertEquals("叁佰零肆亿零伍佰零陆萬零柒佰捌拾玖圆", toChineseNumerals(BigDecimal
.valueOf(30405060789L)));
assertEquals("壹亿贰仟叁佰肆拾伍萬陆仟柒佰捌拾玖圆", toChineseNumerals(BigDecimal
.valueOf(123456789)));
assertEquals("拾贰亿叁仟肆佰伍拾陆萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal
.valueOf(1234567890)));
assertEquals("拾亿零肆佰伍拾陆萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal
.valueOf(1004567890)));
assertEquals("拾亿零肆佰伍拾萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal
.valueOf(1004507890)));
assertEquals("叁仟肆佰拾亿零肆佰萬零玖拾圆", toChineseNumerals(BigDecimal
.valueOf(341004000090L)));
assertEquals("叁仟肆佰拾亿零肆佰伍拾萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal
.valueOf(341004507890L)));
assertEquals("拾亿零柒仟捌佰玖拾圆",
toChineseNumerals(BigDecimal.valueOf(1000007890)));
assertEquals("负拾贰亿叁仟肆佰伍拾陆萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal
.valueOf(-1234567890)));
assertEquals("负拾亿零肆佰伍拾萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal
.valueOf(-1004507890))); assertEquals("壹圆零伍分", toChineseNumerals(new BigDecimal("1.05")));
assertEquals("伍分", toChineseNumerals(new BigDecimal("0.05")));
assertEquals("伍角", toChineseNumerals(new BigDecimal("0.5")));
assertEquals("伍角", toChineseNumerals(new BigDecimal("0.500")));
assertEquals("伍角零肆毫", toChineseNumerals(new BigDecimal("0.5004")));
assertEquals("伍角肆分叁厘", toChineseNumerals(new BigDecimal("0.543")));
assertEquals("壹圆伍角", toChineseNumerals(new BigDecimal("1.5")));
assertEquals("壹圆伍角", toChineseNumerals(new BigDecimal("1.500")));
assertEquals("壹圆伍角肆分叁厘", toChineseNumerals(new BigDecimal("1.543")));
assertEquals("玖佰玖拾玖萬玖仟玖佰玖拾玖圆玖角玖分玖厘玖毫", toChineseNumerals(new BigDecimal(
"9999999.9999")));
assertEquals("玖佰玖拾玖萬玖仟玖佰玖拾玖圆玖角玖分玖厘玖毫", toChineseNumerals(new BigDecimal(
"9999999.99991")));
assertEquals("壹仟萬圆", toChineseNumerals(new BigDecimal("9999999.99999")));
assertEquals("负壹仟萬圆", toChineseNumerals(new BigDecimal("-9999999.99999")));
}
非常高兴CSDN上有一群你们这样的人,谢谢你们的不吝赐教.
public final void testToChineseNumerals() {
assertEquals("零圆", toChineseNumerals(BigDecimal.valueOf(0)));
assertEquals("壹仟圆", toChineseNumerals(BigDecimal.valueOf(1000)));
assertEquals("壹仟零肆拾捌圆", toChineseNumerals(BigDecimal.valueOf(1048)));
assertEquals("壹仟壹佰零捌圆", toChineseNumerals(BigDecimal.valueOf(1108)));
assertEquals("壹萬圆", toChineseNumerals(BigDecimal.valueOf(10000)));
assertEquals("壹萬零壹圆", toChineseNumerals(BigDecimal.valueOf(10001)));
assertEquals("玖佰玖拾玖萬玖仟玖佰玖拾玖圆", toChineseNumerals(BigDecimal
.valueOf(9999999)));
assertEquals("玖亿零玖佰零玖萬零玖佰零玖圆", toChineseNumerals(BigDecimal
.valueOf(909090909)));
assertEquals("叁佰零肆亿零伍佰零陆萬零柒佰捌拾玖圆", toChineseNumerals(BigDecimal
.valueOf(30405060789L)));
assertEquals("壹亿贰仟叁佰肆拾伍萬陆仟柒佰捌拾玖圆", toChineseNumerals(BigDecimal
.valueOf(123456789)));
assertEquals("拾贰亿叁仟肆佰伍拾陆萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal
.valueOf(1234567890)));
assertEquals("拾亿零肆佰伍拾陆萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal
.valueOf(1004567890)));
assertEquals("拾亿零肆佰伍拾萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal
.valueOf(1004507890)));
assertEquals("叁仟肆佰拾亿零肆佰萬零玖拾圆", toChineseNumerals(BigDecimal
.valueOf(341004000090L)));
assertEquals("叁仟肆佰拾亿零肆佰伍拾萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal
.valueOf(341004507890L)));
assertEquals("拾亿零柒仟捌佰玖拾圆",
toChineseNumerals(BigDecimal.valueOf(1000007890)));
assertEquals("负拾贰亿叁仟肆佰伍拾陆萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal
.valueOf(-1234567890)));
assertEquals("负拾亿零肆佰伍拾萬柒仟捌佰玖拾圆", toChineseNumerals(BigDecimal
.valueOf(-1004507890))); assertEquals("壹圆零伍分", toChineseNumerals(new BigDecimal("1.05")));
assertEquals("伍分", toChineseNumerals(new BigDecimal("0.05")));
assertEquals("伍角", toChineseNumerals(new BigDecimal("0.5")));
assertEquals("伍角", toChineseNumerals(new BigDecimal("0.500")));
assertEquals("伍角零肆毫", toChineseNumerals(new BigDecimal("0.5004")));
assertEquals("伍角肆分叁厘", toChineseNumerals(new BigDecimal("0.543")));
assertEquals("壹圆伍角", toChineseNumerals(new BigDecimal("1.5")));
assertEquals("壹圆伍角", toChineseNumerals(new BigDecimal("1.500")));
assertEquals("壹圆伍角肆分叁厘", toChineseNumerals(new BigDecimal("1.543")));
assertEquals("玖佰玖拾玖萬玖仟玖佰玖拾玖圆玖角玖分玖厘玖毫", toChineseNumerals(new BigDecimal(
"9999999.9999")));
assertEquals("玖佰玖拾玖萬玖仟玖佰玖拾玖圆玖角玖分玖厘玖毫", toChineseNumerals(new BigDecimal(
"9999999.99991")));
assertEquals("壹仟萬圆", toChineseNumerals(new BigDecimal("9999999.99999")));
assertEquals("负壹仟萬圆", toChineseNumerals(new BigDecimal("-9999999.99999")));
}