使用Java將阿拉伯數字轉換為中文數字(適配小數轉換)


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM