解决方案 »

  1.   

    java中double型是非精确存储的,说白了,存的可能是近似值
    两个近似值相减,得到的就是近似值了
    可以使用BigDecimal 进行精确运算
      

  2.   

    java采用的是二进制系统,所以浮点数运算有时没法得到精确值,还记得十进制的小数位转二进制吧,就是这个道理,就像十进制没法精确表示1/3一样,所以如果运算需要精确值,就用BigInteger或者BigDecimal。
      

  3.   

    浮点数本来就不精确,去看下IEEE754标准吧
      

  4.   


    谢谢你的回答,但是为什么C# 可以做到呢? 因为这样的计算确实在实际应用中给我很大的不便啊...
    C#和Java处理浮点数可能不相同而已,这有什么不便么?
    如果你需要保留X位小数就再格式化一下不就好了
      

  5.   

    四舍五入取小数点后一位。System.out.println(new BigDecimal(2.0-1.1).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue());
      

  6.   


    谢谢你的回答,但是为什么C# 可以做到呢? 因为这样的计算确实在实际应用中给我很大的不便啊...楼主是C#转java的吗?不如你把这个问题放在C#的版块上问完后告诉我们
      

  7.   


    System.out.print(2.0f - 1.1f);  // 正常。
    System.out.print(2.0d - 1.1d);  // 不正常。
     
      

  8.   


    谢谢你的回答,但是为什么C# 可以做到呢? 因为这样的计算确实在实际应用中给我很大的不便啊...楼主是C#转java的吗?不如你把这个问题放在C#的版块上问完后告诉我们我确实是从C#转java的,刚刚接触java一个月而已.谢谢大家帮助...