关于java:Math.round()方法的奇怪行为

Strange behavior of Math.round() method

本问题已经有最佳答案,请猛点这里访问。

在类数学的静态方法round()中,我注意到了一件不可理解的事情:

1
2
Math.round(0.4999999999999999);  // is 0
Math.round(0.49999999999999999); // is 1

为什么?


0.49999999999999999的有效数字太多,一个double变量不能全部存储。所以隐式舍入在编译期间发生。当你打电话给Math.round()时,论点已经是0.5了(你自己检查一下:0.49999999999999999 == 0.5产生true)。