public class A {
static boolean equal(float a, float b) {
return a == b;
}
public static void main(String[] args) {
System.out.println(equal(3.14159267f,3.14159268f));//结果为true
double d = 2.0;
double d2 = 1.1;
System.out.println(d - d2);//结果为0.8999999999999999
}
}
为什么是上面的结果?

解决方案 »

  1.   

    经典的浮点数计算问题!原因请见:以上问题不是sun的问题,而是二进制的必然问题。
    比如计算机做2.0/3的时候在底层是怎么做的呢?先将数转化为浮点数,然后用CPU中的除法器做的(根据不同的CPU有不同的实现方法),像这种浮点数的运算在最后一位的时候都会遇到取舍,更具不同的取舍方法,得到的结果有可能不一样的。不仅如此,在二进制数与浮点数的转换中间也肯定会有取舍的。相信通过bytecode传过去的数也是通过vm再传到cpu这样算的,所以呢~~~~解决方案:用java实现浮点数的精确计算
      

  2.   

    http://hi.baidu.com/johnsoncr/blog/item/2a782f4bef604ff382025cd6.html
      

  3.   

    就是double的精度问题 计算机是以二进制为计数基础的 这样就是与真数有一个误差
    论坛里应该有很多这类问题的帖子了 搜一下