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); } }
数量格式化
最新推荐文章于 2020-11-18 14:03:43 发布