Java數字轉換工具類
該工具類可以將整數、小數、負數轉換為中文的數字,如: 0 ——> 零 1 ——> 一 2.1 ——> 二點一 -2.1 ——> 負二點一
import java.math.BigDecimal; public class NumberUtil { private NumberUtil() { } /** * 中文數字 */ private static final String[] CN_NUM = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"}; /** * 中文數字單位 */ private static final String[] CN_UNIT = {"", "十", "百", "千", "萬", "十", "百", "千", "億", "十", "百", "千"}; /** * 特殊字符:負 */ private static final String CN_NEGATIVE = "負"; /** * 特殊字符:點 */ private static final String CN_POINT = "點"; /** * int 轉 中文數字 * 支持到int最大值 * * @param intNum 要轉換的整型數 * @return 中文數字 */ public static String int2chineseNum(int intNum) { StringBuffer sb = new StringBuffer(); boolean isNegative = false; if (intNum < 0) { isNegative = true; intNum *= -1; } int count = 0; while(intNum > 0) { sb.insert(0, CN_NUM[intNum % 10] + CN_UNIT[count]); intNum = intNum / 10; count++; } if (isNegative) sb.insert(0, CN_NEGATIVE); return sb.toString().replaceAll("零[千百十]", "零").replaceAll("零+萬", "萬") .replaceAll("零+億", "億").replaceAll("億萬", "億零") .replaceAll("零+", "零").replaceAll("零$", ""); } /** * bigDecimal 轉 中文數字 * 整數部分只支持到int的最大值 * * @param bigDecimalNum 要轉換的BigDecimal數 * @return 中文數字 */ public static String bigDecimal2chineseNum(BigDecimal bigDecimalNum) { if (bigDecimalNum == null) return CN_NUM[0]; StringBuffer sb = new StringBuffer(); //將小數點后面的零給去除 String numStr = bigDecimalNum.abs().stripTrailingZeros().toPlainString(); String[] split = numStr.split("\\."); String integerStr = int2chineseNum(Integer.parseInt(split[0])); sb.append(integerStr); //如果傳入的數有小數,則進行切割,將整數與小數部分分離 if (split.length == 2) { //有小數部分 sb.append(CN_POINT); String decimalStr = split[1]; char[] chars = decimalStr.toCharArray(); for (int i = 0; i < chars.length; i++) { int index = Integer.parseInt(String.valueOf(chars[i])); sb.append(CN_NUM[index]); } } //判斷傳入數字為正數還是負數 int signum = bigDecimalNum.signum(); if (signum == -1) { sb.insert(0, CN_NEGATIVE); } return sb.toString(); } }