强制点(“。”)作为Java中的小数点分隔符


103

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

return String.format("%.2f", someDouble);

除Java在我想使用点时使用Java语言环境的小数点分隔符(逗号)外,此方法运行良好。是否有捷径可寻?


如果您需要使用带有精确小数的double值,则可能应该使用BigDecimal而不是double / Double。有关使用双变量时可能遇到的问题,请参见此链接。您也可以尝试以下方法:System.out.println(5.1d + 1.1d); -结果将是6.199999999999999,而不是6.2。我认为有人在寻找如何将小数位数设置为String的格式时,必须跳过double变量。
razvanone

Answers:


172

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

return String.format(Locale.ROOT, "%.2f", someDouble);

如果您格式化数字(如此处所示),则使用NumberFormat可能更合适。但是,如果您需要其余的格式化功能String.format,则可以正常使用。


6
Locale.ROOT更中立。
speedogoo

@speedogoo:编辑过,尽管我怀疑数字格式没有任何区别。
乔恩·斯凯特

1
是的,但是您不需要在美国和英国之间进行选择。😜–
speedogoo

2
Locale.ROOT还可以防止将来某个国家/地区选择小数点分隔符的更改。
阿提拉(Attila Tanyi)2016年

IMO不会回答这个问题,而是Locale.setDefault(new Locale(“ en”,“ US”));。如另一个答案中指出的那样。没错,这可能是有害的,因为它是全局的,作为程序员,OTH我真正想要的是全局默认值是US,因为在代码中我关心语言环境的其他地方,我都明确地这样做。
nyholku

21

一个更激烈的解决方案是在main()中尽早设置您的Locale。

喜欢:

Locale.setDefault(new Locale("en", "US"));

11
这是一个非常有问题的答案,因为它具有全局影响,因此可能导致许多其他(可能是不希望的)更改。
sleske '16

2
IMO这是对问题的正确答案,此外,作为程序员,这是我想要的。我希望Java默认使用US语言环境作为代码中我实际需要本地化的任何地方,我将在代码中明确使用它。也许只是我的习惯,但是当printf / format使用我的本地Locale原因时,这很烦人,因此十进制的“逗号”与我使用的其他软件(Matlab任何人)完全不兼容。
nyholku

10

您可以将其他语言环境传递给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);
    }

}

结果是(在我的PC上):

$ java PrintfLocales
3.14: Default locale
3,14: Germany locale
3.14: US locale

请参阅Java API中的String.format


4
您也可以使用out.printf((Locale)null, ...)out.format((Locale)null, ...)获取与语言环境无关的表示形式。(还有Locale.ROOT
eckes 2013年

10

为时已晚,但正如此处其他提到的是NumberFormat(及其子类DecimalFormat)的示例用法

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

我感觉在创建DecimalFormatSymbols和设置分隔符之前,应先执行一次此方法。
在线


-3

我有同样的问题.. 55.1转化为55,10。我的快速解决方法是:

String.format("%.2f", value).replaceAll(",",".");


1
只有在有人尝试在不同的语言环境中运行您的代码之前,此方法才有效。不是真正的解决方案。-1
Marco Freudenberger '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.