DecimalFormat("0.0") returns 以逗号而不是点作为分隔符的数据

DecimalFormat("0.0") returns data with a comma as separator instead of a point

import java.text.DecimalFormat;

public class FormatTest {
     public static void main(String[] args) {
        DecimalFormat df = new DecimalFormat("0.0");

        System.out.println(df.format(10.4));  // prints 10,4 instead of 10.4
        System.out.println(df.format(100.5)); // prints 100,5 instead of 100.5
        System.out.println(df.format(3000.3));// prints 3000,3 instead of 3000.3
    }
}

我上面的代码的输出在下面用逗号作为小数点分隔符,而通常它应该是一个点。我将 NetBeans 12.5 与 Maven 一起使用。

似乎 Java 使用了我本地的小数点分隔符而不是点。另外,我需要强制点 (".") 作为唯一的分隔符。

--- exec-maven-plugin:3.0.0:exec (default-cli) @ FormatTest ---

10,4

100,5

3000,3

您可以像这样更改小数格式 post

NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN);
DecimalFormat df = (DecimalFormat)nf;

您可以(并且您实际上需要避免本地化)主动配置 DecimalFormat 更详细如下:

public class Main {
    public static void main(String[] args) throws Exception {
        DecimalFormat df = new DecimalFormat("0.0");
        DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
        decimalFormatSymbols.setDecimalSeparator('.');
        df.setDecimalFormatSymbols(decimalFormatSymbols);
        
        System.out.println(df.format(10.4));  // prints 10,4 instead of 10.4
        System.out.println(df.format(100.5)); // prints 100,5 instead of 100.5
        System.out.println(df.format(3000.3));// prints 3000,3 instead of 3000.3
    }
}

您可以在 reference documentation 中阅读更多详细信息,其中可以阅读重要的片段:

Special Pattern Characters

(...)

The characters listed here are used in non-localized patterns. Localized patterns use the corresponding characters taken from this formatter's DecimalFormatSymbols object instead, and these characters lose their special status.