Java數字轉換工具類
簡介
該工具類可以將整數、小數、負數轉換為中文的數字,如:
0
——>零
1
——>一
2.1
——>二點一
-2.1
——>負二點一
具體代碼如下
import java.math.BigDecimal;
/**
* 數字轉換中文
*
* @author huangshuai
* @date 2019/11/22 0022
*/
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();
}
}