首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于double的有关问题

2012-01-19 
关于double的问题。System.out.println(0.32*0.01) 输出的是0.0032System.out.println(0.33*0.01) 输出的

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

热点排行