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



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

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

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

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

  1. 如果a NaN,则a+0.5d NaN
  2. Math.floor() 被延迟到 StrictMath.floor()NaN 中传递时返回 NaN
  3. NaN转换为long时,它返回 0

因此,最终,归结为为什么将NaN转换为long返回 0。这个问题在这个问题中已经进行了彻底的讨论。

哈哈。我想打自己的头。

Math.round(double)返回一个长一个长不能NaN。另一种选择是例外。

在C#中,结果仍然是double

最新更新