我住在比利时。通常,在数学中,我们用逗号这样写小数: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
答案 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()
,NumberFormat
或DecimalFormat
中的工厂方法,可以控制数字的格式设置(前两个选择区域设置),而不依赖于某些全局设置。< / p>