为什么有些浮点数字会以0结尾 [英] Why do some floating point numbers appear with a trailing 0

查看:172
本文介绍了为什么有些浮点数字会以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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆