package com.dy.pipIrrGlobal.util; import java.math.BigDecimal; /** * @author ZhuBaoMin * @date 2024-02-01 9:58 * @LastEditTime 2024-02-01 9:58 * @Description 金额数字转中文大写 */ public class AmountToChinese { 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; private static final String CN_ZEOR_FULL = "零元" + CN_FULL; public static String toChinese(BigDecimal amount) { StringBuilder result = new StringBuilder(); amount = amount.setScale(MONEY_PRECISION, BigDecimal.ROUND_HALF_UP); long number = amount.movePointRight(MONEY_PRECISION).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(); boolean zero = true; int unitIndex = 0; if (number == 0) { return CN_ZEOR_FULL; } if (number < 0) { number = -number; result.append(CN_NEGATIVE); } long scale = 10; while (true) { if (number == 0) { break; } long numIndex = number % scale; if (zero && numIndex == 0) { zero = false; } if (numIndex != 0) { result.insert(0, CN_UPPER_MONETRAY_UNIT[unitIndex]) .insert(0, CN_UPPER_NUMBER[(int) numIndex]); zero = false; } else if (!zero) { result.insert(0, CN_UPPER_NUMBER[(int) numIndex]); } number = number / scale; unitIndex++; } if (zero) { result.append(CN_FULL); } return result.toString(); } }