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.   

    double 不能精确的显示分数。要精确使用Bigdecimal
      

  2.   

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

  3.   

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

  4.   

    我先来回答第一个问题,
    float是占4个字节的,最大精度是小数点后面7位,如果想知道具体是怎么弄的可以去网上查查相关资料,(我一般都不关心这个具体原理,可能我是个比较蠢的程序员吧)。所以自然为true了
      

  5.   

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

  6.   

    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));//float 型数精确到小数点后7位,7位以后不在计算
    double d = 2.0; 
    double d2 = 1.1; 
    System.out.println(d - d2);//结果为0.8999999999999999 这个也不知道是咋回事把double改成float就行了,应该也是精度问题