为什么Java双打印格式因使用String.format而异

时间:2010-04-13 07:35:28

标签: java floating-point format locale

此代码:

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

在我的电脑上产生了这个结果:

3,141593
3.141592653589793

为什么第一行用逗号打印浮点数而第二行用点?

4 个答案:

答案 0 :(得分:4)

String.format(String, Object...)使用Locale.getDefault()中的格式规则。 String.valueOf(double)没有。使用String.format(Locale, String, Object...)显式指定要使用的语言环境。

答案 1 :(得分:2)

前者尊重您的语言环境设置(似乎使用逗号分隔千位分隔符)。

答案 2 :(得分:0)

第一个使用default locale

second可能使用默认(不可本地化)的实现。

答案 3 :(得分:0)

String.format()使用系统的语言环境。还应该有该方法的变体,您可以传递特定的Locale实例。另一方面,当使用println()时,调用对象的toString()方法 - 在你的情况下是Double#toString(),这是一个相当基本的实现,只是足以呈现对象的可理解的显示。