为什么Math.round()为NaN参数返回0?

MK.*_*MK. 19 java floating-point nan

我认为对NaN进行任何数学运算的结果都应该给我一个NaN,但是 Math.round(Float.NaN) == 0

Math.round()的这种行为的基本原理是什么?

奇怪的是,C#的行为有所不同:http://msdn.microsoft.com/en-us/library/75ks3aby.aspx

tsk*_*zzy 28

Math.round()被定义为(long)Math.floor(a + 0.5d).

  1. 如果aNaN,那a+0.5d就是NaN.
  2. Math.floor()被delagated到StrictMath.floor()返回NaN时传入NaN.
  3. 当转换NaN为a时long,它返回0

所以最终,归结为为什么要转换NaNlong0.这个问题在这个问题中得到了彻底的讨论.

  • +1在Java 7中,由于此问题已将此定义删除[为什么Math.round(0.499999999999999917)在Java 6上舍入为1](http://vanillajava.blogspot.co.uk/2012/04/why-mathround0499999999999999917- rounds.html) (5认同)

小智 14

哈哈.我想把自己砸在脑袋里.

Math.round(double)返回不能NaN.替代方案是一个例外.

在C#中,结果仍然是double.