private String toChinese(BigDecimal bigDecimal) { String[] capitalNumber = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; String[] unit = {"","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟"}; String[] behindUnit = {"微","毫","厘","分","角"}; BigDecimal front = bigDecimal.setScale(0, RoundingMode.DOWN); BigDecimal behind = bigDecimal.subtract(front).multiply(new BigDecimal(100000)); StringBuilder stringBuilder = new StringBuilder(); long frontLong = front.longValue(); int behindInt = behind.intValue(); int index = 0; boolean zero = true; while (frontLong > 0) { int number = (int) (frontLong % 10); if (number == 0) { if (index % 4 == 0) { stringBuilder.insert(0,unit[index]); zero = true; } if (!zero) { stringBuilder.insert(0,capitalNumber[number]); zero = true; } frontLong /= 10; index++; continue; }else { zero = false; } stringBuilder.insert(0,unit[index++]); stringBuilder.insert(0,capitalNumber[number]); frontLong /= 10; } int length = stringBuilder.length() + 1; index = 0; zero = true; if (behindInt > 0) { stringBuilder.append("点"); while (behindInt != 0) { int number = behindInt % 10; if (number == 0) { if (!zero) { stringBuilder.insert(length, capitalNumber[number]); zero = true; } behindInt /= 10; index++; continue; }else { zero = false; } stringBuilder.insert(length, behindUnit[index++]); stringBuilder.insert(length, capitalNumber[number]); behindInt /= 10; } if (index < 5) { stringBuilder.insert(length, capitalNumber[0]); } } return stringBuilder.toString(); }