/**
* 将小数形式的金额转换为大写形式
* @Enclosing_Method : convertToChineseNumber
* @Written by : wangjin
* @Creation Date : Jun 25, 2010 10:42:36 AM
* @version : v1.00
* @param number :金额的数字形式
* @return :String 金额的大写形式
* @throws Exception
*
*/
public String convertToChineseNumber(Double number) throws Exception {
StringBuffer chineseNumber = new StringBuffer();
String[] num = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
String[] unit = { "分", "角", "圆", "拾", "佰", "仟", "万", "拾", "佰", "仟",
"亿", "拾", "佰", "仟", "万" };
String tempNumber = String.valueOf(Math.round((number * 100)));
int tempNumberLength = tempNumber.length();
if ("0".equals(tempNumber)) {
return "零圆整";
}
if (tempNumberLength > 15) {
throw new Exception("超出转化范围.");
}
boolean preReadZero = true; // 前面的字符是否读零
for (int i = tempNumberLength; i > 0; i--) {
if ((tempNumberLength - i + 2) % 4 == 0) {
// 如果在(圆,万,亿,万)位上的四个数都为零,如果标志为未读零,则只读零,如果标志为已读零,则略过这四位
if (i - 4 >= 0 && "0000".equals(tempNumber.substring(i - 4, i))) {
if (!preReadZero) {
chineseNumber.insert(0, "零");
preReadZero = true;
}
i -= 3; // 下面还有一个i--
continue;
}
// 如果当前位在(圆,万,亿,万)位上,则设置标志为已读零(即重置读零标志)
preReadZero = true;
}
Integer digit = Integer.parseInt(tempNumber.substring(i - 1, i));
if (digit == 0) {
// 如果当前位是零并且标志为未读零,则读零,并设置标志为已读零
if (!preReadZero) {
chineseNumber.insert(0, "零");
preReadZero = true;
}
// 如果当前位是零并且在(圆,万,亿,万)位上,则读出(圆,万,亿,万)
if ((tempNumberLength - i + 2) % 4 == 0) {
chineseNumber.insert(0, unit[tempNumberLength - i]);
}
}
// 如果当前位不为零,则读出此位,并且设置标志为未读零
else {
chineseNumber
.insert(0, num[digit] + unit[tempNumberLength - i]);
preReadZero = false;
}
}
// 如果分角两位上的值都为零,则添加一个“整”字
if (tempNumberLength - 2 >= 0
&& "00".equals(tempNumber.substring(tempNumberLength - 2,
tempNumberLength))) {
chineseNumber.append("整");
}
return chineseNumber.toString();
}