日期:2014-05-20  浏览次数:20887 次

关于double的问题。
System.out.println(0.32*0.01); 输出的是0.0032

System.out.println(0.33*0.01); 输出的是0.0033000000000000004

为什么加了0。01就会这样呢? double到底是怎么进行运算的? 谢谢




------解决方案--------------------
应该是 二进制和十进制转换的精度偏差 造成的
------解决方案--------------------
在二进制里1/2是0.1,1/4是0.01,3/4是0.11, 但是类似1/5就没法用小数表示了。
也就是说1/5在十进制里能用小数(0.2)表示,在二进制里就是无限(循环/不循环)小数了。
系统就只能用近似值来表示1/5了。
------解决方案--------------------
Java code
public class Main { 
    public static void main(String[] args) { 
        double d=2.0; 
        double d2=1.1; 
        System.out.println(d-d2); 
    } 
}
d-d2=0.8999999999999999

------解决方案--------------------
探讨
顶上去顶上去顶上去~~ 期待解决~

------解决方案--------------------
看看计算机组成原理相关的书吧。
浮点数的表示及运算都有精度限制的,不是精确的。
浮点数的意义就在于牺牲精度,来换取表示范围。比如,double类型绝对值最小能表示到10的-300多次方,最大能到10的300多次方。
而定点数,比如int,虽然每一位都是精确的,但它只能表示到21亿。