1

我想将 DecimalFormat 与自定义模式一起使用。可以使用 applyPattern() 方法设置模式,但这对于 Numberformat 是不可能的,因此必须使用 DecimalFormat。但是,如果不提供语言环境,则无法使用 DecimalFormat,然后它会使用语言环境设置在自定义模式之上应用特定于语言环境的模式。因此,实质上输出发生了变化,不再符合所提供模式的细节。

该案例以前曾提出过,但我们没有解决方案:DecimalFormat ignores given pattern but uses Locale

有没有办法在没有任何自动语言环境格式化魔法的情况下严格使用自定义模式?谢谢。

4

1 回答 1

1

让我先检查一下我是否理解您的问题是否正确。

    double number = 123456.789;
    NumberFormat nf = new DecimalFormat("###,###.###");
    System.out.println(nf.format(number));

此代码使用您的默认 FORMAT 语言环境。例如,当我的默认语言环境设置为德语时,输出为:

123.456,789

使用了德语格式符号:点作为千位分隔符,逗号作为小数“点”。你不想要那个。

解决方案:我通常将Locale.ROOT其用作“区域设置中性区域设置”,以表示“不要在此处执行任何区域设置特定处理”。它也在这里工作。将格式化程序的实例化更改为:

    NumberFormat nf = new DecimalFormat("###,###.###", new DecimalFormatSymbols(Locale.ROOT));

现在输出——仍然是德语语言环境——是:

123,456.789

或者更短且可能更好的方法来获得相同的结果:

    NumberFormat nf = NumberFormat.getInstance(Locale.ROOT);

我们不需要关心DecimalFormat,只要NumberFormat

于 2019-10-02T11:41:13.940 回答