public class CountUtils { /** * 格式化整數,以帶有萬/億,或K/M/B等單位. * * @param numStr 原整數,如果不是整數格式,會原樣返回. * @param language 中文格式傳入zh_CN(包含zh或cn即可),不區分大小寫. * @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); } }
數量格式化
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.