Double.IsNaN(双d)的目的是什么?

时间:2011-11-01 13:26:39

标签: c# .net

在.Net中,Double类型有一个静态方法IsNan(),它接受​​一个参数double并返回bool

当然,这意味着该方法将始终返回true,因为它只能接受double?有人可以解释这个方法的重点,什么时候可能会返回false?纯粹好奇,想要接受教育。

编辑:对于一个问题非常糟糕的问题,我深表歉意。你没事,我应该阅读文档。而且,是的,我的确意味着“方法总会返回错误”。

7 个答案:

答案 0 :(得分:13)

doublefloat具有“非数字”值,用于表示错误数量。 NaN有一个不幸的特性,它总是将错误与所有事物(包括其自身)进行比较。因此,您可以调用一种特殊方法来告诉您给定的双精度是否为NaN。 (由于NaNs是唯一的值,它们具有不相等的属性,您还可以通过将其与自身进行比较来判断值是否为NaN!但是x != x看起来很奇怪代码;简单地调用IsNaN(x)更加惯用。)

文档中是否存在一些不明确的信息,提示您在此处提出问题?如果你能解释你发现的不清楚的地方,我可以将这些反馈传递给文档管理员。

答案 1 :(得分:6)

不,如果值是“非数字”值(例如由于除以零),它将仅返回true。来自the docs

  

返回一个值,该值指示指定的数字是否计算为不是数字(NaN)的值。

  

浮点运算返回NaN,表示操作结果未定义。例如,将0.0除以0.0会得到NaN。

请注意,不能执行:

if (x == double.NaN)

因为该比较将始终返回false。这就是为什么有一种特殊的方法来确定“NaN-ness”。 (正如评论中所指出的,可以使用x != x实际检测到它,而这只适用于“非数字”值 - 但这并不像使用专用方法那样清晰。 )

答案 2 :(得分:1)

如果double传递计算结果为NaN,则返回true;否则,错误。

答案 3 :(得分:0)

NaN(非数字)值在here中定义。如果等于NaN值,则此函数基本上检查给定的双数,如果是这种情况则返回true。在调试期间可能需要这样做,或者确保算术运算以您希望的方式工作,并且不会返回任何模糊结果。

答案 4 :(得分:0)

就像双打consts代表MinValueMaxValue一样,他们也有const代表NaN。双重操作将返回NaN时的一个示例是0到0时潜水。

  

浮点运算返回NaN,表示操作结果未定义。例如,将0.0除以0.0会得到NaN。

答案 5 :(得分:0)

您似乎正在将该方法解释为IsNotADouble。但功能不是那样的。方法是IsNan,意思是IsNotANumber。当除以0时,当某些未初始化的内存垃圾呈现为double或其他一些情况时,会发生这种情况。您可以在wikipedia处阅读更多关于非数字(NAN)的内容。

答案 6 :(得分:0)

Double表示C#中的浮点数。这些数字代表小数,但由于可用存储的位宽有限,它不能代表所有数字。

因此,该标准规定了一个特殊值(实际上是几个),称为“非数字”或简称为NaN。这些特殊值与所有其他值不同,并且是特殊处理。

有关详细信息,请参阅Wikipedia entry of NaN

注意还有其他特殊值,如正无穷大和负无穷大,它们与NaN不同。