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

DecimalFormat格式化数字不符合预期,为何出现单引号分隔?

为什么我的DecimalFormat用逗号分隔模式却输出了撇号?

嘿,这个问题我之前踩过坑!核心原因其实很简单:你在DecimalFormat模式里写的,并不是直接输出逗号,而是一个「分组分隔符标记」,实际输出的符号会由当前JVM的默认Locale(区域设置)决定。

比如有些欧洲地区(像瑞士、德国部分区域)的Locale会用撇号'作为千位分隔符,如果你的JVM默认Locale正好是这类地区,那即使你写了,###的模式,最终输出的分隔符也会变成撇号,这就是你看到123'456'789的原因。

另外先提一句:你的原代码还有个小问题——format是实例变量,但main是静态方法,直接调用会编译报错,我在下面的示例里已经修正了这个问题。

解决方案有两种,选哪种看你的需求:

方案1:指定固定Locale,强制用逗号作为分隔符

直接让DecimalFormat使用像Locale.US这类明确用逗号做千位分隔符的区域设置,这样不管JVM默认Locale是什么,输出都会是逗号:

import java.text.DecimalFormat;
import java.util.Locale;

public class NumberFormatter {
    // 用US Locale初始化DecimalFormat,确保分隔符是逗号
    private static final DecimalFormat format = (DecimalFormat) DecimalFormat.getInstance(Locale.US);

    public static void main(String[] args) {
        int number;
        try {
            number = Integer.parseInt(args[0]);
        } catch (NumberFormatException ex) {
            System.out.println("The provided value was invalid!");
            System.exit(0);
            return;
        }
        format.applyPattern("#,###,###.##");
        String formattedNumber = format.format(number);
        System.out.println(formattedNumber); // 现在会输出123,456,789
        System.exit(0);
    }
}

方案2:手动设置分组分隔符

如果你不想依赖Locale,也可以直接修改DecimalFormat的符号配置,强制把分组分隔符设为逗号:

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

public class NumberFormatter {
    private static final DecimalFormat format = new DecimalFormat();

    public static void main(String[] args) {
        int number;
        try {
            number = Integer.parseInt(args[0]);
        } catch (NumberFormatException ex) {
            System.out.println("The provided value was invalid!");
            System.exit(0);
            return;
        }
        // 获取符号配置实例,手动设置分组分隔符为逗号
        DecimalFormatSymbols symbols = format.getDecimalFormatSymbols();
        symbols.setGroupingSeparator(',');
        format.setDecimalFormatSymbols(symbols);
        
        format.applyPattern("#,###,###.##");
        String formattedNumber = format.format(number);
        System.out.println(formattedNumber); // 输出123,456,789
        System.exit(0);
    }
}

另外补充:原代码里return format.format(number);在main方法里是无效的,因为main是void返回类型,我在示例里改成了输出格式化后的结果,你可以根据自己的需求调整(比如返回给其他方法或者直接输出)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:47:29