public final class ChangeMoney {
// private double amount = 0.0D;
private static final String NUM = "零壹贰叁肆伍陆柒捌玖";
private static final String UNIT = "仟佰拾个";
private static final String GRADEUNIT = "仟万亿兆";
private static final String DOTUNIT = "角分厘";
private static final int GRADE = 4;
// private static final String SIGN = "¥";
private static final NumberFormat nf = new DecimalFormat("#0.###");
public static String toBigAmt(double amount) {
nf.setMinimumFractionDigits(3);// 小数点后不足的补零
// 将double类型的数格式化并转换成字符串,实际上进行了四舍五入
String amt = nf.format(amount);
System.out.println(amt);
// Double d = new Double(amount);
String dotPart = ""; // 取小数位
String intPart = ""; // 取整数位
// 调整级次长度
if (intPart.length() % GRADE != 0)
grade += 1;
// 对每级数字处理,先处理最高级,然后再处理低级的
for (int i = grade; i >= 1; i--) {
strTmp = getNowGradeVal(intPart, i);// 取得当前级次数字
result += getSubUnit(strTmp);// 转换大写
result = dropZero(result);// 除零 去掉连续的零
// 加级次单位
if (i > 1) // 末位不加单位
// 单位不能相连续
// 注意:连续4个零的时候要特殊处理(wmj修改此bug)
if (getSubUnit(strTmp).equals("零零零零")) {
result = result + "零";
} else {
result += GRADEUNIT.substring(i - 1, i);
}