金额格式化工具AmtFormat
===================================金额格式化工具
1.金额大写转换
2.金额格式化输出 $200.01 ¥200.01
import java.math.BigDecimal; public class AmtFormatUtil { public static int ROUND_HALF_UP = BigDecimal.ROUND_HALF_UP;//四舍五入,舍弃部分如果大于等于5就进位,小于5的直接舍弃 public static int ROUND_HALF_DOWN = BigDecimal.ROUND_HALF_DOWN;//五舍六入,舍弃部分如果大于5才进位,小于或等于5直接舍弃 public static int ROUND_HALF_EVEN = BigDecimal.ROUND_HALF_EVEN; public static int ROUND_UP = BigDecimal.ROUND_UP;//舍弃部分如果大于等于1,就进位,否则舍弃 public static int ROUND_DOWN = BigDecimal.ROUND_DOWN;//直接截取,不进位 public static int ROUND_FLOOR = BigDecimal.ROUND_FLOOR; public static int ROUND_CEILING = BigDecimal.ROUND_CEILING; public static int ROUND_UNNECESSARY = BigDecimal.ROUND_UNNECESSARY; // 金额单位枚举值 private static final String UNIT[] = { "万", "仟", "佰", "拾", "亿", "仟", "佰", "拾", "万", "仟", "佰", "拾", "元", "角", "分" }; // 金额大写 private static final String NUM[] = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; /** * 金额格式化(保留两位小数,且最后一位四舍五入) * @param amtDeci * @return */ public static String format(BigDecimal amtDeci) { BigDecimal outputDeci = amtDeci.setScale(2, ROUND_HALF_UP); return outputDeci.toString(); } /** * 金额格式化 * @param amtDeci * @param unitMode * @return */ public static String format(BigDecimal amtDeci, int scale, int roundingMode, String unitMode) { BigDecimal outputDeci = amtDeci.setScale(scale, roundingMode); return new StringBuffer(unitMode).append(outputDeci.toString()).toString(); } /** * 将金额小数转换成中文大写金额(小数最多保留两位) * @param amtDeci * @return */ public static String formatToChina(BigDecimal amtDeci) { //换算以分为单位,最后一位四舍五入 BigDecimal multiply = amtDeci.setScale(2, ROUND_HALF_UP); BigDecimal moneyDeci = multiply.multiply(new BigDecimal(100)); //大写转换 if (moneyDeci.longValue() == 0) { return "零元整"; } String moneyStr = String.valueOf(moneyDeci.longValue()); int numIndex = 0; // numIndex用于选择金额数值 int unitIndex = UNIT.length - moneyStr.length(); // unitIndex用于选择金额单位 boolean isZero = false; // 用于判断当前为是否为零 String result = ""; for (; numIndex < moneyStr.length(); numIndex++, unitIndex++) { char num = moneyStr.charAt(numIndex); if (num == '0') { isZero = true; if (UNIT[unitIndex] == "亿" || UNIT[unitIndex] == "万" || UNIT[unitIndex] == "元") { // 如果当前位是亿、万、元,且数值为零 result = result + UNIT[unitIndex]; // 补单位亿、万、元 isZero = false; } } else { if (isZero) { result = result + "零"; isZero = false; } result = result + NUM[Integer.parseInt(String.valueOf(num))] + UNIT[unitIndex]; } } // 不是角分结尾就加"整"字 if (!result.endsWith("角") && !result.endsWith("分")) { result = result + "整"; } // 例如没有这行代码,数值"400000001101.2",输出就是"肆千亿万壹千壹佰零壹元贰角" result = result.replaceAll("亿万", "亿"); return result; } }
===================================金额格式化工具测试类
/** * 金额格式化 */ @Test public void test_format() { BigDecimal amtDeci = new BigDecimal(200.016); String amtFormat01 = AmtFormatUtil.format(amtDeci, 2, AmtFormatUtil.ROUND_HALF_UP, "¥"); System.out.println(amtFormat01); String amtFormat02 = AmtFormatUtil.format(amtDeci); System.out.println(amtFormat02); } /** * 金额大写 */ @Test public void test_formatToChina() { String amtFormat = AmtFormatUtil.formatToChina(new BigDecimal(200.01)); System.out.println(amtFormat); }