double a = 2.2;
    double b = 2.2;
    System.out.println("a==b"+(a == b));    System.out.println("1.0+1.2==2.2"+(1.0+1.2==2.2));
    System.out.println("0.9+1.3==2.2"+(0.9+1.3==2.2));
    System.out.println("0.8+1.4==2.2"+(0.8+1.4==2.2));
    System.out.println("0.7+1.5==2.2"+(0.7+1.5==2.2));
    System.out.println("0.6+1.6==2.2"+(0.6+1.6==2.2));
    System.out.println("0.5+1.7==2.2"+(0.5+1.7==2.2));
    System.out.println("0.4+1.8==2.2"+(0.4+1.8==2.2));
    System.out.println("0.3+1.9==2.2"+(0.3+1.9==2.2));    System.out.println("1.1+1.1==2.2"+(1.1+1.1==2.2));
    System.out.println("1.2+1.0==2.2"+(1.2+1.0==2.2));
    System.out.println("1.3+0.9==2.2"+(1.3+0.9==2.2));
    System.out.println("1.4+0.8==2.2"+(1.4+0.8==2.2));
    System.out.println("1.5+0.7==2.2"+(1.5+0.7==2.2));
    System.out.println("1.6+0.6==2.2"+(1.6+0.6==2.2));
    System.out.println("1.7+0.5==2.2"+(1.7+0.5==2.2));
    System.out.println("1.8+0.4==2.2"+(1.8+0.4==2.2));
    System.out.println("1.9+0.3==2.2"+(1.9+0.3==2.2));
    System.out.println("2+0.2==2.2"+(2+0.2==2.2));
1.0+1.2==2.2true 
0.9+1.3==2.2true 
0.8+1.4==2.2true 
0.7+1.5==2.2true 
0.6+1.6==2.2true 
0.5+1.7==2.2true 
0.4+1.8==2.2true 
0.3+1.9==2.2false 
1.1+1.1==2.2true 
1.2+1.0==2.2true 
1.3+0.9==2.2true 
1.4+0.8==2.2true 
1.5+0.7==2.2true 
1.6+0.6==2.2true 
1.7+0.5==2.2true 
1.8+0.4==2.2true 
1.9+0.3==2.2false 
2+0.2==2.2true
为什么打出来的结果是这样 帮忙解释一下 谢谢啊 

解决方案 »

  1.   

    float和double类型的主要设计目标是为了科学计算和工程计算。它们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。float和double类型对于货币计算尤为不合适,因为要让一个float或者double精确地表达0.1(或者10的任何其他负数次方值)是不可能的。 
    要想得到精确结果,用BigDecimal,int或者long进行计算。 
    摘自 < <Effective Java>>
      

  2.   

    用BigDecimal吧,计算的是比较精确的
      

  3.   

    float和double类型的主要设计目标是为了科学计算和工程计算。它们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。float和double类型对于货币计算尤为不合适,因为要让一个float或者double精确地表达0.1(或者10的任何其他负数次方值)是不可能的。 
    要想得到精确结果,用BigDecimal,int或者long进行计算。 
    摘自 < <Effective Java>>
    正解
      

  4.   

    1.9+0.3==2.2   是判断语句 如果为真返回true 相反则返回false
      

  5.   

    不能说jdk 有bug
    这是 浮点数表示本身的问题,ieee754标准
      

  6.   

    需要精确表示的话就用BigDecimal或者自己用整型来处理,处理完毕在恢复小数点。
      

  7.   

    double的精度计算需要配合BigDecimal类来实现
      

  8.   

    比如两个float,2000000000和 2000000050的二进制表示就是相同的,他们的值就是相等的。