为什么有些浮点数字会以0结尾 [英] Why do some floating point numbers appear with a trailing 0
问题描述
有谁知道为什么数字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的代码似乎不依赖于语言环境。如果我为(Locale l:Locale.getAvailableLocales()){
Locale.setDefault(l)运行
System.out.println(l ++ 1 / 1e3);
$ / code>
在Ubuntu 11.04上的Java 6 update 26我得到
ja_JP 0.0010
es_PE 0.0010 $ b $ en 0.0010
...许多语言环境具有相同的结果... $ b在同一个Java 7上的$ b sv_SE 0.0010
da_DK 0.0010
es_HN 0.0010
我得到的系统
$ pre $ code $ ms_MY 0.001
ar_QA 0.001
is_IS 0.001
...很多locales同样的结果...
el_CY 0.001
hu 0.001
fr_FR 0.001
这被认为是Java 1.3中的一个bug - Java 6: http://bugs.java.com/view_bug.do?bug_id=4428022
编辑:至于为什么会发生这种情况,下面是从OpenJDK 6移植来的错误报告中提到的修复: http://hg.openjdk.java.net/jdk6/jdk6/jdk/r ev / 8159687b6316
原来这是一个错误的错误。 (修正将<=更改为<)。
Does anyone know why the numbers 0.001 to 0.009 are rendered to a String with a trailing 0 but other numbers do not. e.g. numbers 0.01 to 0.09 do not.
System.out.println(Locale.getDefault());
for (int i = 0; i <= 20; i++)
System.out.println(i / 1e3);
prints
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
EDIT The code for DecimalFormat doesn't appear to be locale dependant. If I run
for (Locale l : Locale.getAvailableLocales()) {
Locale.setDefault(l);
System.out.println(l + " " + 1 / 1e3);
}
on Java 6 update 26 on Ubuntu 11.04 I get
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
on Java 7 on same system I get
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
This was identified as a bug in Java 1.3 - Java 6: http://bugs.java.com/view_bug.do?bug_id=4428022
EDIT: As to why this happens, here's the fix referred to in the bug report that was ported from OpenJDK 6: http://hg.openjdk.java.net/jdk6/jdk6/jdk/rev/8159687b6316
Turns out it's an off-by-one error. (The fix changes <= to <).
这篇关于为什么有些浮点数字会以0结尾的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!