正在研究java核心技术这本书,看到java的for循环
在检测两个浮点数是否相等需要格外小心!!!
for(int double x=0; x!=10; x+=0.1);
这个循环可能永远都不会结束。由于舍入的误差,最终可能得不到精确值。
上面的循环中,因为0.1无法精确用二进制表示,所以,x将从9.999 999 999 999 98跳到10.099 099 999 999 98
下面我们看下关于0.1转二进制的事:
十进制转化成二进制,因为是小数的0.1,用乘2取整的方法 0.1 * 2 ———— 0.2 0 * 2 -------- 0.4 0 * 2 -------- 0.8 0 * 2 -------- 0.6 1 (此处的1不参加下一步乘 * 2 法,直接写在整数初) -------- 0.2 1 (同上) * 2 -------- 0.4 0 * 2 -------- 0.8 0 * 2 -------- 0.6 1 * 2 -------- 0.2 1 * 2 下面的算法都一样 所以最后的结果就是小数点后面的数。是上面最右边写的数字,从上排到下,按高位到最低位 所以答案是无限循环的0.000100010001《来自百度知道》![]()