double i = 0.80;
double j = 0.20;
double k = 0.89;
double f = i+j+k;
System.out.println(f);输出结果却是:1.8900000000000001 double i = 0.80;
double j = 0.20;
double k = 0.88;
double f = i+j+k;
System.out.println(f);输出结果却是:1.88
奇怪!!!!!!

解决方案 »

  1.   


    double i = 0.80;
    double j = 0.20;
    double k = 0.89
    double f = i+j+k;
    System.out.println(f);输出结果却是:1.8900000000000001 double i = 0.80;
    double j = 0.20;
    double k = 0.88;
    double f = i+j+k;
    System.out.println(f);输出结果却是:1.88
    奇怪!!!!!!
      

  2.   

    double 精度太大了,改float就行了。我估计是二进制转换造成的!
      

  3.   

    double k = 0.89;
    这个应该是给0。89加颜色吧,是java网络编程的内容吗?
    不过这个结果确实不清楚为什么
      

  4.   

    无论是double,还是float,二进制位是有限的,很多小数都是无法精确表示的,遂有了这种问题
      

  5.   

    Java对浮点数支持的不是很好、、、
      

  6.   

    精度问题,所以才会有两个double类型的,不能用=来比较,要进行减法操作。
      

  7.   

    印象中,这是一道 比较 抽象的 面试题! 确实会出现 这种问题,就是 double 的精度问题!
      

  8.   

    float与double都有精度问题,所以计算资金问题的时候还是用高精运算那个工具类吧,别用double和float
      

  9.   

    因为double不能存储所有的小数
      

  10.   

    嗯嗯 顶楼上  那个类就是 BigDecimal
      

  11.   

    精度问题,很正常的,所以一般的计算器程序是不能采用float、double类型的,需要采用高精度类型
      

  12.   

    精度问题,很正常的,所以一般的计算器程序是不能采用float、double类型的,需要采用高精度类型
      

  13.   

    二进制系统,无法精确表示分数。就像十进制无法精确表示1/3一样。有个BigDecimal类没误差。——书上写的。
      

  14.   

    这确实很正常,精度问题,double不能精确表示。
      

  15.   

    是的,计算机和你手工算结果是不一样的
    有一定的误差
    --------------------
    http://www.qinglobo.com/list-27.htm
      

  16.   

    所以在项目中,要使用精度运算时,用 BigDecimal,不然都容易发生精度丢失
      

  17.   

    楼主这个情况我也遇见过  我给一个A商品定价1.3(用的double) 
    如果我买3个 价格(还是double)就是3.99999999999999
      

  18.   

    这是JAVA本身决定的,所以尽量少浮点型,如可以通过*10,/10int来计算
      

  19.   

    精度问题!double float 本身就是近似值!如果想要精确地话 改用其他类型的!
      

  20.   

    无论是double还是float,都只是一定精度的近似值
      

  21.   


    说精度问题,太含糊了,我给楼主说明下:
    假如我我们有10个double变量:
    1.0000000000000000     - a (注意a与其他变量不同,它精确到小数点后16位)
    1.00000000000000001    - b
    1.00000000000000005    - c
    1.00000000000000007    - d
    1.00000000000000001    - e
    1.00000000000000001    - f
    1.00000000000000001    - g
    1.00000000000000001    - h
    1.00000000000000001    - i
    1.00000000000000001    - g然后我们现在要任意选几个变量相加 = sum 
    我们打印的时候,肯定有个精确度,比如是16,你越多数加,精确度就越降低。