Java:浮点格式取决于Locale

时间:2010-12-29 11:23:05

标签: java formatting floating-point locale

我住在比利时。通常,在数学中,我们用逗号这样写小数:3,141592
当我格式化浮动时,这也是结果。

System.out.println(String.format("%f", 3.141592));

因此,.,取代,如此:3,141592。因此,当我需要一个点时,我必须添加这样的内容:String.format("%f", 3.14).replace(',','.');

所以,问题是:有没有办法改变Locale,这使得Java中的每个格式化程序都使用一个点而不是逗号?

由于


System.out.println(Locale.getDefault());

打印

nl_BE

4 个答案:

答案 0 :(得分:46)

尝试使用String.format(Locale.US, "%f", floatValue)仅设置格式化期间使用的区域设置。

答案 1 :(得分:9)

一个简单的解决方案,但是可以在整个区域设置中广泛使用,将系统区域设置设置为美国或英国。实施例。

Locale.setDefault(Locale.US);

由于您已更改了问题,因此您只需使用print方法指定本地。

System.out.println(String.format(Locale.US, "%f", 3.141592));

答案 2 :(得分:7)

查看可能有用 http://download.oracle.com/javase/6/docs/api/java/text/DecimalFormat.html 其中包含许多用于在必要时使用Locale精确输出字符串的选项

  

DecimalFormat是一个具体的子类   NumberFormat格式化十进制   数字。它有各种功能   旨在使解析成为可能   和格式化任何语言环境中的数字,   包括对西方,阿拉伯语的支持,   和印度数字。它也支持   不同种类的数字,包括   整数(123),定点数   (123.4),科学记数法(1.23E4),   百分比(12%)和货币   金额(123美元)。所有这些都可以   本地化。

通过定制例程路由输入和输出通常很有用。这是来自JAMA图书馆的一个(http://math.nist.gov/javanumerics/jama/)

   public void print (PrintWriter output, int w, int d) {
      DecimalFormat format = new DecimalFormat();
      format.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.US));
      format.setMinimumIntegerDigits(1);
      format.setMaximumFractionDigits(d);
      format.setMinimumFractionDigits(d);
      format.setGroupingUsed(false);
      print(output,format,w+2);
   }

通过使用此功能,您可以确保未来的问题和改进可能得到解决

答案 3 :(得分:1)

对于格式化数字,您真的不应该依赖toString()。使用String.format()NumberFormatDecimalFormat中的工厂方法,可以控制数字的格式设置(前两个选择区域设置),而不依赖于某些全局设置。< / p>