System.out.println(9.0 % 1.5); //结果:0.0
System.out.println(9.0 % 1.8); //结果:1.799999999998请问为什么会出现如此情况?
我想应该全部是0.0才对啊

解决方案 »

  1.   

    这与浮点数的保存精度有关系,你可以使用BigDecimal代替浮点数做精确计算。
      

  2.   

    这个问题来自于浮点运算精度的问题。虽然楼主的第二条语句的结果不是准确的1.8,但是1.79999999998这个结果编译器认为是正确的。如果想得到高精度结果,建议使用Decimal类类型来处理。另外%是整除运算,一般用在整数范围内。
      

  3.   

    直接浮点数运算是不准的,需要用到BigDecimal
      

  4.   

    BigDecimal可以%吗?
    能否给出代码示例呢?BigDecimal可以%吗?
    能否给出代码示例呢?
      

  5.   

    BigDecimal bd1 = new BigDecimal((float)9.0 % 1.5); 
    BigDecimal bd = new BigDecimal((float)9.0 % 1.8); 
    System.out.println( bd1.floatValue()); 
    System.out.println( bd.floatValue()); 
      

  6.   

    诸位,还是不能解决最终问题System.out.println(9.0 % 1.5); //结果:0.0
    System.out.println(9.0 % 1.8); //结果:1.799999999998
    追问一句:为什么,上面的结果是0.0,而下面不是呢
      

  7.   

    浮点运算可能导致舍入误差。在 Java 程序中使用浮点数和小数充满着陷阱。浮点数和小数不象整数一样“循规蹈矩”,不能假定浮点计算一定产生整型或精确的结果,虽然它们的确“应该”那样做。最好将浮点运算保留用作计算本来就不精确的数值,譬如测量。如果需要表示定点数(譬如,几美元和几美分),则使用 BigDecimal 。
    http://justjavac.iteye.com/blog/1073775