Math.round()方法的奇怪行为

时间:2013-02-16 18:57:02

标签: java math jvm rounding

我在班级round()中的静态方法Math中发现了一件难以理解的事情:

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

为什么?

1 个答案:

答案 0 :(得分:13)

0.49999999999999999有太多有效数字,而一个double变量无法存储它们。因此,在编译期间会发生隐式舍入。当你打电话Math.round()时,参数已经是0.5(检查一下:0.49999999999999999 == 0.5收益true)。