數量格式化

public class CountUtils {

    /**
     * 格式化整數,以帶有萬/,K/M/B等單位.
     *
     * @param numStr   原整數,如果不是整數格式,會原樣返回.
     * @param language 中文格式傳入zh_CN(包含zhcn即可),不區分大小寫.
     * @return 格式化的數字.
     */
    public static String formatNumber(String numStr, String language) {
        long num;
        try {
            num = Long.parseLong(numStr);
        } catch (NumberFormatException e) {
            LogUtil.e(e);
            return numStr;
        }
        // 確定是數字
        int unitIndex; // 單位的序號.
        String[] unitStrs; // 單位數組.
        if (TextUtils.isEmpty(language))
            language = "zh_CN";
        String pattern;
        language = language.toLowerCase();
        if (TextUtils.indexOf(language, "zh") != -1 || TextUtils.indexOf(language, "cn") != -1) {
            pattern = "#,###0";
            unitStrs = new String[] {"", "", "9999+"};
        } else {
            pattern = "#,##0";
            unitStrs = new String[] {"k", "m", "b", "999b+"};
        }
        DecimalFormat format = new DecimalFormat(pattern);
        // 以逗號分組的數字格式.
        String groupNum = format.format(num);
        String[] split = groupNum.split(",");
        // 僅有整數部分
        if (split.length == 1)
            return numStr;
        // 單位
        if (split.length > unitStrs.length)
            return unitStrs[unitStrs.length - 1];
        String unitPart = unitStrs[split.length - 2];
        // 整數部分
        String integerPart = split[0];
        // 小數部分
        String decimalPart = null;
        int integerLength = integerPart.length();
        if (split.length > 1 && integerLength < split[1].length()) {
            decimalPart = split[1].substring(0, Math.min(2, split[1].length() - integerLength));
            while (decimalPart.length() > 0 && decimalPart.lastIndexOf("0") == decimalPart.length() - 1)
                decimalPart = decimalPart.substring(0, decimalPart.length() - 1);
        }
        StringBuilder builder = new StringBuilder();
        builder.append(integerPart);
        if (!TextUtils.isEmpty(decimalPart))
            builder.append(".").append(decimalPart);
        builder.append(unitPart);
        return builder.toString();
    }

    /**
     * 獲取數量格式化字符.
     *
     * @param numStr
     * @param context
     * @return
     */
    public static String getCountString(String numStr, Context context) {
        String language = OleConfiguration.getInstance().getLanguage(context);
        return formatNumber(numStr, language);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章