网上有许多将数值转换成人民币大写的代码,其中有不少写得很好的。昨天在Csdn上浏览,觉得这个比较简洁,但也有几点小Bug,稍加整理,觉得仍然与财务表达方式有不一致的地方,故先贴上来,请大家看看。 public class GetRMBToUpperCase ... { /**//* * 将数值转换成人民币大写,根据网上一搜索整理修改而成 * 仍然有两个Bug 1、万亿以上可能出错 2、连续0可能出错 */ public String getNumberToRMB(String rmb) ...{ /**//* * 人民币表达式中使用的中文字符(num)及计量单位位字符(dw) */ String num = "零壹贰叁肆伍陆柒捌玖"; String dw = "元拾佰仟万亿"; // 补齐小数位,多加“0”不影响计算和转换 rmb += rmb.indexOf(".") == -1 ? ".00" : "00"; String mm[] = rmb.split("//."); String money = mm[0]; /**//* * 转换小数部分 */ String result = num.charAt(Integer.parseInt("" + mm[1].charAt(0))) + "角" + num.charAt(Integer.parseInt("" + mm[1].charAt(1))) + "分"; /**//* * 设置循环,从整数最低位开始转换 */ for (int i = 0; i < money.length(); i++) ...{// i=位数,从个位开始取值 String str = "";// 设置人民币大写字符初值 int n = Integer.parseInt(money.substring(money.length() - i - 1, money.length() - i));// 当前位的数值=n str = str + num.charAt(n);// 根据数值取出人民币中文大写字符 if (i == 0) ...{// 根据位数判断 str = str + dw.charAt(i);// 加上元 } else if ((i + 4) % 8 == 0) ...{ str = str + dw.charAt(4);// 加上万 } else if (i % 8 == 0) ...{ str = str + dw.charAt(5);// 加上亿 } else ...{ str = str + dw.charAt(i % 4);// 不为整就求余 } result = str + result;// 把当前字符加到最前面(最高位) } result = result.replaceAll("零([^亿万元角分])", "零"); result = result.replaceAll("亿零+万", "亿零"); result = result.replaceAll("零+", "零"); result = result.replaceAll("零([亿万元])", "$1"); result = result.replaceAll("壹拾", "拾"); result = result.replaceAll("^元", ""); result = result.replaceAll("零角零分", "整"); result = result.replaceAll("零分", "整"); return result; }}