强制点(".")作为java中的小数分隔符

dte*_*ech 96 java double formatting

我目前使用以下代码打印双:

return String.format("%.2f", someDouble);
Run Code Online (Sandbox Code Playgroud)

这很有效,除了Java使用我的Locale的小数分隔符(逗号),而我想使用一个点.是否有捷径可寻?

Jon*_*eet 159

使用其重载String.format可以指定语言环境:

return String.format(Locale.ROOT, "%.2f", someDouble);
Run Code Online (Sandbox Code Playgroud)

如果您只是格式化数字 - 就像您在这里一样 - 那么使用NumberFormat可能更合适.但是如果你需要其余的格式化功能String.format,这应该可以正常工作.

  • Locale.ROOT更中立. (6认同)
  • Locale.ROOT也可以安全地防止一个国家​​选择小数分隔符的未来可能的变化. (2认同)

Fed*_*rgi 19

更激动人心的解决方案是在main()中尽早设置您的Locale.

喜欢:

Locale.setDefault(new Locale("en", "US"));
Run Code Online (Sandbox Code Playgroud)

  • 这是一个非常有问题的答案,因为它具有全局效应,因此可能会导致许多其他(可能是不合需要的)更改. (10认同)
  • IMO这是对问题的正确答案,此外,作为程序员,这是我想要的。我希望Java默认使用US语言环境作为代码中我实际需要本地化的任何地方,我将在代码中明确使用它。也许只是我的习惯,但是当printf / format使用我的本地Locale原因时,这很烦人,因此十进制的“逗号”与我使用的其他软件(Matlab任何人)完全不兼容。 (2认同)

Sim*_*ter 10

您可以将其他Locale传递给java.lang.String.format以及java.io.PrintStream.printf(例如System.out.printf()):

import java.util.Locale;

public class PrintfLocales {

    public static void main(String args[]) {
        System.out.printf("%.2f: Default locale\n", 3.1415926535);
        System.out.printf(Locale.GERMANY, "%.2f: Germany locale\n", 3.1415926535);
        System.out.printf(Locale.US, "%.2f: US locale\n", 3.1415926535);
    }

}
Run Code Online (Sandbox Code Playgroud)

这导致以下(在我的PC上):

$ java PrintfLocales
3.14: Default locale
3,14: Germany locale
3.14: US locale
Run Code Online (Sandbox Code Playgroud)

请参阅Java API中的String.format.

  • 您还可以使用`out.printf((Locale)null,...)`或`out.format((Locale)null,...)`来获得与语言环境无关的表示.(还有[`Locale.ROOT`](http://docs.oracle.com/javase/6/docs/api/java/util/Locale.html#ROOT)) (4认同)

Viz*_*har 9

太晚了,但正如这里提到的那样是NumberFormat(和它的子类DecimalFormat)的样本用法

public static String format(double num) {
    DecimalFormatSymbols decimalSymbols = DecimalFormatSymbols.getInstance();
    decimalSymbols.setDecimalSeparator('.');
    return new DecimalFormat("0.00", decimalSymbols).format(num);
 }
Run Code Online (Sandbox Code Playgroud)