我认为对NaN进行任何数学运算的结果都应该给我一个NaN,但是Math.round(Float.NaN) == 0
Math.round()这种行为的理由是什么?
奇怪的是,C#的行为有所不同:http://msdn.microsoft.com/en-us/library/75ks3aby.aspx
答案 0 :(得分:28)
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.此问题已在this question中进行了详细讨论。
答案 1 :(得分:14)
哈哈。我想把自己砸在头上。
Math.round(double)
返回 long , long 不能NaN
。替代方案是例外。
在C#中,结果仍为double
。