New file |
| | |
| | | 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(); |
| | | } |
| | | } |