Leo*_*ger 35 .net c# floating-point
Double.IsNaN()使用Double.PositiveInfinityas参数调用时,结果为false.这是违背我的直觉的,因为无穷大不是一个数字.显然"NaN"只存在于.NET中的常量,是IEEE标准描述的还是自定义实现细节?是否有更短的方法来检查a Double是否为"NaN"而不是:
(Double.IsNaN(d) || Double.IsPositiveInfinity(d) || Double.IsNegativeInfinity(d))
Run Code Online (Sandbox Code Playgroud)
要么
(Double.IsNaN(d) || Double.IsInfinity(d))
Run Code Online (Sandbox Code Playgroud)
Ser*_*kiy 55
正如MSDN所说,NaN意味着结果未定义.无穷大的结果定义如下:
当操作结果未定义时,方法或运算符返回NaN.例如,将零除零的结果是NaN,如以下示例所示.(但请注意,将非零数除以零会返回PositiveInfinity或NegativeInfinity,具体取决于除数的符号.)
因此,将无穷大视为NaN并不是一个好主意.您可以编写扩展方法来检查值是否不是NaN或无穷大:
// Or IsNanOrInfinity
public static bool HasValue(this double value)
{
return !Double.IsNaN(value) && !Double.IsInfinity(value);
}
Run Code Online (Sandbox Code Playgroud)
您不再需要 SergeyBerezovskiy 回答的扩展名。
double有IsFinite()方法检查双精度数是否为有限数(不是NaN或Infinity):
double.IsFinite(d)
Run Code Online (Sandbox Code Playgroud)
查看.Net Framework和.Net Core 中的源代码
| 归档时间: |
|
| 查看次数: |
36887 次 |
| 最近记录: |