我在班级round()中的静态方法Math中发现了一件难以理解的事情:
Math.round(0.4999999999999999); // is 0
Math.round(0.49999999999999999); // is 1
为什么?
答案 0 :(得分:13)
0.49999999999999999
有太多有效数字,而一个double
变量无法存储它们。因此,在编译期间会发生隐式舍入。当你打电话Math.round()
时,参数已经是0.5(检查一下:0.49999999999999999 == 0.5
收益true
)。