【发布时间】:2011-11-25 17:51:25
【问题描述】:
有谁知道为什么数字 0.001 到 0.009 被渲染为带有尾随 0 的字符串,而其他数字却没有。例如数字 0.01 到 0.09 没有。
System.out.println(Locale.getDefault());
for (int i = 0; i <= 20; i++)
System.out.println(i / 1e3);
打印
en_GB
0.0
0.0010
0.0020
0.0030
0.0040
0.0050
0.0060
0.0070
0.0080
0.0090
0.01
0.011
0.012
0.013
0.014
0.015
0.016
0.017
0.018
0.019
0.02
编辑 DecimalFormat 的代码似乎与语言环境无关。如果我跑
for (Locale l : Locale.getAvailableLocales()) {
Locale.setDefault(l);
System.out.println(l + " " + 1 / 1e3);
}
在 Ubuntu 11.04 上的 Java 6 更新 26 我得到
ja_JP 0.0010
es_PE 0.0010
en 0.0010
... many locales with the same result ...
sv_SE 0.0010
da_DK 0.0010
es_HN 0.0010
在我得到的同一系统上的 Java 7 上
ms_MY 0.001
ar_QA 0.001
is_IS 0.001
... many locales with the same result ...
el_CY 0.001
hu 0.001
fr_FR 0.001
【问题讨论】:
-
嗯...我不明白这种行为。我得到“0.001”等。你在哪个地区?
-
我得到了这种行为,fr_CH,但我也得到了 Locale.US。
-
可能是JVM,我用的是Windows7 jdk 1.6.22
-
@Matthew:很有趣。顺便说一句,我在 Windows 7 上使用 JDK 7。
-
与 Ubuntu 10.10、JDK 1.6.0_20 的 @JonSkeet 相同
标签: java floating-point render-to-string