 |
| 把数字转换成中文货币表示 |
|
yippit 整理 更新:2005-04-12 16:10:51 版本: 1.0
|
|
以下是一个把BigDecimal转化成中文的货币表示的一段代码,博君一哂!
//中文金额单位数组 straChineseUnit = new String[] {"分", "角", "圆", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟"}; //中文数字字符数组 straChineseNumber = new String[] {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
/** * Description 将数字金额转换为中文金额 * @param <p>BigDecimal bigdMoneyNumber 转换前的数字金额</P> * @return String 调用:myToChineseCurrency("101.89")="壹佰零壹圆捌角玖分" myToChineseCurrency("100.89")="壹佰零捌角玖分" myToChineseCurrency("100")="壹佰圆整" */ public String DoNumberCurrencyToChineseCurrency(BigDecimal bigdMoneyNumber) { String strChineseCurrency = ""; //零数位标记 boolean bZero = true; //中文金额单位下标 int ChineseUnitIndex = 0;
DoPrintMessage("Calling Method DoNumberCurrencyToChineseCurrency");
try { if (bigdMoneyNumber.intValue() == 0) return "零圆整";
//处理小数部分,四舍五入 double doubMoneyNumber = Math.round(bigdMoneyNumber.doubleValue() * 100);
//是否负数 boolean bNegative = doubMoneyNumber < 0;
//取绝对值 doubMoneyNumber = Math.abs(doubMoneyNumber);
//循环处理转换操作 while (doubMoneyNumber > 0) { //整的处理(无小数位) if (ChineseUnitIndex == 2 && strChineseCurrency.length() == 0) strChineseCurrency = strChineseCurrency + "整";
//非零数位的处理 if (doubMoneyNumber % 10 > 0) { strChineseCurrency = straChineseNumber[(int)doubMoneyNumber % 10] + straChineseUnit[ChineseUnitIndex] + strChineseCurrency; bZero = false; } //零数位的处理 else { //元的处理(个位) if (ChineseUnitIndex == 2 ) { //段中有数字 if (doubMoneyNumber > 0) { strChineseCurrency = straChineseUnit[ChineseUnitIndex] + strChineseCurrency; bZero = true; } } //万、亿数位的处理 else if (ChineseUnitIndex == 6 || ChineseUnitIndex == 10) { //段中有数字 if (doubMoneyNumber % 1000 > 0) strChineseCurrency = straChineseUnit[ChineseUnitIndex] + strChineseCurrency; }
//前一数位非零的处理 if (!bZero) strChineseCurrency = straChineseNumber[0] + strChineseCurrency;
bZero = true; }
doubMoneyNumber = Math.floor(doubMoneyNumber / 10); ChineseUnitIndex ++; }
//负数的处理 if (bNegative) strChineseCurrency = "负" + strChineseCurrency; } catch (Exception e) { DoPrintMessage("Exception Reason : Call Method DoNumberCurrencyToChineseCurrency Error"); DoPrintMessage("Exception Message : " + e.getMessage()); e.printStackTrace();
return ""; }
return strChineseCurrency; }
|
|
|
评论人:ninjar
|
发表时间: Mon May 08 18:34:34 CST 2006
|
|
好啊
|
|
|
评论人:yszx76
|
发表时间: Sat May 20 18:45:02 CST 2006
|
|
编程分格很好!我正用,这个转换!
|
|
|
评论人:lyncn
|
发表时间: Tue Jul 25 09:49:52 CST 2006
|
大小写风格就有问题,if后面建议都加{},结果也是错的, BigDecimal bg3 = new BigDecimal("30000100.889"); System.out.println(chinesecurrency.doNumberCurrencyToChineseCurrency(bg3)); 的结果是“叁仟零壹佰圆捌角柒分”,测试太不充分了吧!
|
|
|
评论人:happylinyang
|
发表时间: Wed Sep 20 10:57:13 CST 2006
|
不错,支持一下,
|
|
|
评论人:xs57224059
|
发表时间: Mon Apr 09 19:28:49 CST 2007
|
|
fsdafdgdgffv
|
|
|
评论人:xs57224059
|
发表时间: Mon Apr 09 19:31:03 CST 2007
|
|
khjkjlghklgk
|
|
|
评论人:nbnbnnb
|
发表时间: Tue Apr 22 11:18:05 CST 2008
|
|
很好的东西,很实用。
|
|
|
|
|
 |