Java:浮点格式取决于Locale

我住在比利时。 一般来说,在数学中,我们用逗号这样写小数:3,141592
这也是我格式化浮点数时的结果。

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

所以, . 被替换为a ,如: 3,141592 。 因此,当我需要一个点时,我必须添加如下内容: String.format("%f", 3.14).replace(',','.');

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

谢谢


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

版画

 nl_BE 

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

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

 Locale.setDefault(Locale.US); 

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

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

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

DecimalFormat是NumberFormat的具体子类,用于格式化十进制数。 它具有多种function,旨在解析和格式化任何语言环境中的数字,包括支持西方,阿拉伯语和印度语数字。 它还支持不同类型的数字,包括整数(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); } 

通过使用此function,您可以确保未来的问题和增强function可能得到解决

对于格式化数字,你真的不应该依赖toString() 。 使用String.format()NumberFormat的工厂方法或DecimalFormat ,它们允许您控制数字的格式(前两个选择Locale)而不依赖于某些全局设置。