我认为对 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()
whichNaN
在传入时返回NaN
。NaN
为 along
时,它返回 0所以最终,归结为为什么转换NaN
为 a 会long
返回 0。这个问题已经在这个问题中得到了彻底的讨论。
哈哈。我想打自己的头。
Math.round(double)
返回一个long和一个long不能NaN
。另一种情况是例外。
在 C# 中,结果仍然是double
.