数量格式化

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);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值