我认为对 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
时,它返回 0
因此,最终,归结为为什么将NaN
转换为long
返回 0。这个问题在这个问题中已经进行了彻底的讨论。
哈哈。我想打自己的头。
Math.round(double)
返回一个长,一个长不能NaN
。另一种选择是例外。
在C#中,结果仍然是double
。