/**
* 金额小写转换成大写
* @param num
* @return
* @throws Exception
*/
public static String digitUppercase(String num) throws Exception {
String fraction[] = { "角", "分" };
String digit[] = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
String unit1[] = { "", "拾", "佰", "仟" };
String unit2[] = { "元", "万", "亿", "万亿" };
BigDecimal bigDecimal = new BigDecimal(num);
bigDecimal = bigDecimal.multiply(new BigDecimal(100));
String strVal = String.valueOf(bigDecimal.toBigInteger());
String head = "";
String end = "";
if(strVal.length()<2){
return "零元整";
}else{
head = strVal.substring(0, strVal.length() - 2);
end = strVal.substring(strVal.length() - 2);
}
String endMoney = "";
String headMoney = "";
if ("00".equals(end)) {
endMoney = "整";
} else {
if (!end.substring(0, 1).equals("0")) {
endMoney += digit[Integer.valueOf(end.substring(0, 1))
.intValue()] + "角";
} else if (end.substring(0, 1).equals("0")
&& !end.substring(1, 2).equals("0")) {
endMoney += "零";
}
if (!end.substring(1, 2).equals("0")) {
endMoney += digit[Integer.valueOf(end.substring(1, 2))
.intValue()] + "分";
}
}
char[] chars = head.toCharArray();
Map map = new HashMap();
boolean zeroKeepFlag = false;
int vidxtemp = 0;
for (int i = 0; i < chars.length; i++) {
int idx = (chars.length - 1 - i) % 4;
int vidx = (chars.length - 1 - i) / 4;
String s = digit[Integer.valueOf(String.valueOf(chars[i]))
.intValue()];
if (!"零".equals(s)) {
headMoney += s + unit1[idx] + unit2[vidx];
zeroKeepFlag = false;
} else if (i == chars.length - 1 || map.get("zero" + vidx) != null) {
headMoney += "";
} else {
headMoney += s;
zeroKeepFlag = true;
map.put("zero" + vidx, "1");
}
if (vidxtemp != vidx || i == chars.length - 1) {
headMoney = headMoney.replaceAll(unit2[vidx], "");
headMoney += unit2[vidx];
}
if (zeroKeepFlag && (chars.length - 1 - i) % 4 == 0) {
headMoney = headMoney.replaceAll("零", "");
}
}
return headMoney + endMoney;
}