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

2022-09-02 09:03:31

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

Math.round()的这种行为的理由是什么?

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


答案 1

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

  1. 如果 是 ,则为 。aNaNa+0.5dNaN
  2. Math.floor() 被降级到 StrictMath.floor() 在 传入 时返回。NaNNaN
  3. 当转换为 时,它返回 0NaNlong

因此,最终,归结为为什么投掷到a返回0。这个问题已经在这个问题上进行了彻底的讨论。NaNlong


答案 2

哈哈。我想打自己的头。

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

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