关于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亿。