多谢各位!!

解决方案 »

  1.   

    首先说明,这个计算在我得jvm上结果是:24996.999999999996。
    这个和浮点数在计算机中的表示方法有关。
    我不太记得双精度浮点数的表示的具体方法了,这里只是做一个举例说明。
    假如双精度浮点数在计算机中占64位,其中32位用来保存小数信息,32位用来表示指数。那么0.3571在计算机中的表示方法就是:
    10110110110101011100111110101010  × 2^-33
    也就是10110110110101011100111110101010 乘以2的-33次方。
    而0.3571换算成二进制的后应该是
    1011011011010101110011111010101011001101100111101 × 2^-50
    我们放在一起比较以下
    10110110110101011100111110101010  × 2^-33
    1011011011010101110011111010101011001101100111101 × 2^-50
    可以看到,实际上在将0.3571转换成双精度浮点数的时候,是有精度的损失的,有误差存在的,只不过误差很小。
    因此,在计算70000 × 0.3571的时候,误差就会被放大70000倍。
    在将超出精度范围的尾数丢弃的时候,是直接丢弃还是四舍五入,应该和不同的JVM的实现有关。因此在不同的JVM上计算出来的结果会有差异。
      

  2.   

    http://blog.csdn.net/treeroot/archive/2004/09/05/95071.aspx