Java 格式化数字为千分位表示

在昨天的基础上封装一哈,昨天的:https://www.cnblogs.com/engure/p/17087169.html

/**
 * 格式化数字为千分位表示
 *
 * @param value       数值,可为 String/六种数值类型/BigDecimal
 * @param fieldLength 保留的小数位数,为 null 时的默认规则:若 value 为 bigDecimal 则不进行设置,否则保留两位小数
 * @param delimiter   千分位分隔符,为空时默认为 ,
 * @return 格式化后的数据,比如 1,234,567.89
 */
public static String format(Object value, Integer fieldLength, String delimiter) {
    try {
        if (value == null) {
            throw new NullPointerException("数值不可为null");
        }

        BigDecimal bigDecimalVal;
        if (value instanceof BigDecimal) {
            bigDecimalVal = (BigDecimal) value;
            if (fieldLength != null) {
                bigDecimalVal = bigDecimalVal.setScale(fieldLength, RoundingMode.HALF_UP);
            }
        } else {
            bigDecimalVal = new BigDecimal(value.toString());
            if (fieldLength != null) {
                bigDecimalVal = bigDecimalVal.setScale(fieldLength, RoundingMode.HALF_UP);
            } else {
                bigDecimalVal = bigDecimalVal.setScale(2, RoundingMode.HALF_UP);
            }
        }

        if (!StringUtils.hasLength(delimiter)) {
            delimiter = ",";
        }

        NumberFormat instance = NumberFormat.getInstance();
        instance.setMinimumFractionDigits(bigDecimalVal.scale());
        String[] parts = instance.format(bigDecimalVal).split(",");
        StringBuilder res = new StringBuilder();
        for (int i = 0; i < parts.length; i++) {
            res.append(parts[i]);
            if (i != parts.length - 1) {
                res.append(delimiter);
            }
        }
        return res.toString();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
posted @   EGU0  阅读(1582)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示