为什么 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
我认为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)
a
NaN
a+0.5d
NaN
Math.floor()
被降级到 StrictMath.floor()
在 传入 时返回。NaN
NaN
NaN
long
因此,最终,归结为为什么投掷到a返回0。这个问题已经在这个问题上进行了彻底的讨论。NaN
long
哈哈。我想打自己的头。
Math.round(double)
返回一个 long,而 long 不能是 。另一种选择是例外。NaN
在 C# 中,结果仍然是 .double