读书人

关于double的有关问题

发布时间: 2012-01-19 00:22:27 作者: rapoo

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

读书人网 >J2SE开发

热点推荐