You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DecimalFormat中配置小数部分的千位分隔符格式

解决DecimalFormat小数部分添加千位分隔符(下划线)的问题

要实现整数部分用逗号千分位、小数部分用下划线按三位分组的格式化效果,可以通过以下步骤完成:

  1. 配置DecimalFormat开启小数部分的分组功能,使用逗号作为临时分隔符。
  2. 格式化后将小数部分的逗号替换为下划线,保留整数部分的逗号不变。

完整代码示例

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;

public class DecimalFormatDemo {
    public static void main(String[] args) {
        DecimalFormatSymbols symbols = new DecimalFormatSymbols();
        symbols.setGroupingSeparator(','); // 整数部分用逗号分隔

        // 模式说明:整数部分强制千分位,小数部分至少保留1位,最多保留9位(可根据需求调整)
        DecimalFormat fmt = new DecimalFormat("#,##0.0###", symbols);
        fmt.setGroupingUsed(true); // 启用分组功能
        fmt.setDecimalGroupingSize(3); // 设置小数部分每3位分组

        // 格式化并替换小数部分的分隔符
        formatAndPrint(fmt, 1234.0);
        formatAndPrint(fmt, 0.1201);
        formatAndPrint(fmt, 0.00001234);
    }

    private static void formatAndPrint(DecimalFormat fmt, double num) {
        String formatted = fmt.format(num);
        // 替换小数部分的逗号为下划线,整数部分逗号保留
        String result = formatted.replaceAll("\\.(.*)", m -> "." + m.group(1).replace(',', '_'));
        System.out.println(result);
    }
}

代码说明

  • setDecimalGroupingSize(3):默认DecimalFormat仅对整数部分做分组,此方法开启小数部分的三位分组规则。
  • 正则替换:通过replaceAll匹配小数点后的所有内容,将其中的临时分隔符逗号替换为下划线,确保整数部分的千分位逗号不受影响。
  • 模式#,##0.0###:#,##0保证整数部分至少显示1位且带千分位;.0###保证小数部分至少显示1位,最多显示4位(可根据需求调整#的数量来控制最大小数位数)。

内容的提问来源于stack exchange,提问作者Joe DiNottra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 22:05:27