String.format返回一个使用逗号作为分隔符的double

时间:2015-04-15 04:45:21

标签: java string

我正在制作一个随机文件生成器,它使用随机笛卡尔点生成一个txt 问题是:当我将String.format用于数字时(比方说4.3),我得到“4,3”。但我不想要逗号,我甚至不知道为什么它会逗号,根本就没有用... 代码:

FileWriter fileWriter = new FileWriter(new File("txt.txt"));
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
Random generator = new Random();
int nPoints = generator.nextInt(10)+10;
bufferedWriter.write(""+nPoints);
for (int n=0; n<nPoints; n++){
    bufferedWriter.newLine();
    String x = String.format("%.1f", generator.nextDouble()*100-50);
    String y = String.format("%.1f", generator.nextDouble()*100-50);
    bufferedWriter.write(x + " " + y);
}
bufferedWriter.close();

我已经使用replace(“,”,“。”)解决了这个问题,但我认为这不是一个好的解决方案,而且我想知道格式方法中是否有任何理由使用逗号。

2 个答案:

答案 0 :(得分:2)

试试这个:

        DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(Locale.getDefault());
        otherSymbols.setDecimalSeparator('.');
        DecimalFormat formatter = new DecimalFormat("####.0",otherSymbols);

        for (int n=0; n<nPoints; n++){
            bufferedWriter.newLine();
            String x = formatter.format(generator.nextDouble()*100-50);
            String y = formatter.format(generator.nextDouble()*100-50);

输出:

33.1 -37.7

答案 1 :(得分:2)

您应该以正确的方式解决问题,而不是使用解决方法(用点替换逗号)。 “有一个API。”

Locale.setDefault(new Locale("pt", "BR"));
String portuguese = String.format("%.1f", 1.4d);
String english = String.format(Locale.ENGLISH, "%.1f", 1.4d);
System.out.println("pt_BR = " + portuguese);
System.out.println("en_GB = " + english);

产生输出

pt_BR = 1,4
en_GB = 1.4

这不是nonstandardized function (see the Javadoc)。标准为use the default locale,如果需要you are able to change the behavior