Strange behavior of Math.round() method
在类数学的静态方法round()中,我注意到了一件不可理解的事情:
1 2
| Math. round(0.4999999999999999); // is 0
Math. round(0.49999999999999999); // is 1 |
为什么?
- @迪斯罗伊:对我来说,这看起来不像个虫子。它看起来是真的四舍五入0.5。(请注意,最后一个数字是9,而不是4。)
- 它不是重复的,也不是错误。这就是浮点数的行为方式。
- @你说得对。我读得太快了。
0.49999999999999999的有效数字太多,一个double变量不能全部存储。所以隐式舍入在编译期间发生。当你打电话给Math.round()时,论点已经是0.5了(你自己检查一下:0.49999999999999999 == 0.5产生true)。