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)而不依赖于某些全局设置。