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

1 java math jvm rounding

我在类Math中的静态方法round()中注意到了一个难以理解的事情:

Math.round(0.4999999999999999);  // is 0
Math.round(0.49999999999999999); // is 1
Run Code Online (Sandbox Code Playgroud)

为什么?

Tom*_*icz 14

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