package com.dsh.guns.modular.system.util; import java.math.BigDecimal; public class BigDecimalToChineseAmountUtil { private static final String[] CN_UPPER_NUMBER = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; private static final String[] CN_UPPER_MONETRAY_UNIT = {"分", "角", "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "兆", "拾", "佰", "仟"}; private static final String CN_FULL = "整"; private static final String CN_NEGATIVE = "负"; private static final int MONEY_PRECISION = 2; public static String convertToChineseAmount(BigDecimal number) { StringBuilder builder = new StringBuilder(); if (number.compareTo(BigDecimal.ZERO) < 0) { builder.append(CN_NEGATIVE); number = number.abs(); } long integralPart = number.longValue(); BigDecimal decimalPart = number.subtract(BigDecimal.valueOf(integralPart)).multiply(BigDecimal.TEN.pow(MONEY_PRECISION)); if (decimalPart.compareTo(BigDecimal.ZERO) == 0) { builder.append(CN_FULL); } long integralPartTemp = integralPart; int unit = 0; boolean isZero = true; boolean needZero = false; while (integralPartTemp > 0) { long tempNumber = integralPartTemp % 10; if (tempNumber > 0) { if (needZero) { builder.insert(0, CN_UPPER_NUMBER[0]); } builder.insert(0, CN_UPPER_MONETRAY_UNIT[unit]); builder.insert(0, CN_UPPER_NUMBER[(int) tempNumber]); isZero = false; needZero = false; } else { if (!isZero) { needZero = true; } if (unit == 2 || unit == 6 || unit == 10 || unit == 14) { builder.insert(0, CN_UPPER_MONETRAY_UNIT[unit]); isZero = true; } } integralPartTemp = integralPartTemp / 10; unit++; } if (decimalPart.compareTo(BigDecimal.ZERO) > 0) { builder.append(convertDecimalToChinese(decimalPart)); } return builder.toString(); } private static String convertDecimalToChinese(BigDecimal decimalPart) { StringBuilder builder = new StringBuilder(); for (int i = 0; i < MONEY_PRECISION; i++) { int num = decimalPart.intValue() % 10; builder.insert(0, CN_UPPER_NUMBER[num]); builder.append(CN_UPPER_MONETRAY_UNIT[i + 2]); decimalPart = decimalPart.multiply(BigDecimal.TEN); } return builder.toString(); } }