比如现在我a=1.10;b=1.10;a和b都是double类型的
我计算出的结果是2.1999999999999;
double很多时候都会出现这种问题,出现这种问题的本质原因是什么?还有如何解决,就是我现在就像让结果等于2.20!用四舍五入?应该怎么做?

解决方案 »

  1.   

    用String.format("%10.2f",a)试试吧
      

  2.   

    浮点数在计算机内没有办法精确表示,各种语言都是如此(int)(a*100+0.5)/100.0能四舍五入到小数后的两位,但还是不能解决浮点数的精确表示。
      

  3.   

    BigDecimal a=new BigDecimal(1.10);
    BigDecimal b=new BigDecimal(1.10);
    BigDecimal c=a.add(b);
    System.out.println(c.doubleValue());
      

  4.   

    5楼错误。你自己都没调试一次吗?
    如果要精确计算,请务必用String描述所有的数字,用double来构造BigDecimal,会比直接用double更难堪        BigDecimal a=new BigDecimal("1.10");
            BigDecimal b=new BigDecimal("1.10");
            BigDecimal c=a.add(b);
            System.out.println(c.doubleValue());
      

  5.   

    浮点类型没有办法精确表示
    不只是java 
    c++
    c#也都存在这个问题
    一般的解决办法是确定自己要的小数位数
    然后四舍五入
      

  6.   

    我的没问题啊 double a = 1.10;
    double b = 1.10;
    System.out.println(a+b);
      

  7.   

    答:
    1)4楼的四舍五入不正确。对于负数不对。
    参考:
    double ds=Math.round(a*100)/100.0;//对于实数a(无论正负),进行四舍五入
    这时楼主要的不精确的表示
    2)若要较精确的表示,可用:BigDecimal 
      

  8.   

    你的问题我也遇到过,最后改成BigDecimal了,就好了。
      

  9.   

    顶15楼:
    double ds=Math.round(a*100)/100.0
      

  10.   

    double,float就是这个样子,不是不稳定!!!!,有的数字无法用2进制表示成浮点数
    double,float用于某些科学计算的场合。
    在业务系统中,一般用bigdecimal来进行小数的计算,自己构造BigDecimal时切记要用String作为参数,new BigDecimal("0.1")而不要用new BigDecimal(0.1)
      

  11.   

    主要原因是double 计算时转化了二进制数计算。
    出现这种原因就好比,我们十进制数计算
    10/3一样。
      

  12.   

    使用BigDecimal能够解决精确的浮点数计算。