在.Net中,Double
类型有一个静态方法IsNan()
,它接受一个参数double
并返回bool
。
当然,这意味着该方法将始终返回true,因为它只能接受double?有人可以解释这个方法的重点,什么时候可能会返回false?纯粹好奇,想要接受教育。
编辑:对于一个问题非常糟糕的问题,我深表歉意。你没事,我应该阅读文档。而且,是的,我的确意味着“方法总会返回错误”。
答案 0 :(得分:13)
double
和float
具有“非数字”值,用于表示错误数量。 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
代表MinValue
和MaxValue
一样,他们也有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不同。