C# C语言中的可空双NaN比较#
我有两个可为空的双精度数,一个期望值和一个实际值(我们称它们为value和valueExpected)。使用100*(值/预期值)找到百分比。但是,如果valueExpected为零,则返回NaN。到目前为止一切都很好 现在,如果我需要检查值,看看它是否为NaN,我该怎么做?通常可以使用:C# C语言中的可空双NaN比较#,c#,double,nan,C#,Double,Nan,我有两个可为空的双精度数,一个期望值和一个实际值(我们称它们为value和valueExpected)。使用100*(值/预期值)找到百分比。但是,如果valueExpected为零,则返回NaN。到目前为止一切都很好 现在,如果我需要检查值,看看它是否为NaN,我该怎么做?通常可以使用: if (!Double.IsNaN(myDouble)) 但这不适用于可为null的值(IsNaN仅适用于不可为null的变量)。我已经更改了代码来执行检查(valueExpected==0),但我仍然很好
if (!Double.IsNaN(myDouble))
但这不适用于可为null的值(IsNaN仅适用于不可为null的变量)。我已经更改了代码来执行检查(valueExpected==0),但我仍然很好奇——有没有办法检查可为null的NaN
编辑:当我说代码不工作时,我的意思是它不会编译。首先测试null不起作用。对于所有实例,首先检查属性,然后才能访问属性
double? d = 0.0; // Shorthand for Nullable<double>
if (d.HasValue && !Double.IsNaN(d.Value)) {
double val = d.Value;
// val is a non-null, non-NaN double.
}
double?d=0.0;//空值的简写
if(d.HasValue&!Double.IsNaN(d.Value)){
双val=d.值;
//val是一个非null、非NaN双精度。
}
您也可以使用
if (!Double.IsNaN(myDouble ?? 0.0))
最里面的括号中的值要么是
myDouble
(去掉了它的null
包装),如果它是非null,要么就是0.0
如果myDouble
是null
。Se.我也遇到了同样的问题,我通过铸造双打解决了这个问题?双倍
double.IsNaN((double)myDouble)
如果为NaN,则返回true;如果不是,则返回false。C#7.0组合的null+NaN检查可以这样写:
double? d = whatever;
if(d is double val && double.IsNaN(val))
Console.WriteLine(val);
优点是本地范围变量
val
,它不是null
,也不是double.NaN
,甚至可以在if
之外使用,也许正是visual studio阻止了我。我确实有这样的想法:`if(myDouble!=null){if(!Double.IsNaN(myDouble)){//Do stuff!}}`但是这和你的代码没有编译,它仍然不喜欢使用IsNaN,即使在'is null'检查之后。你看到变量名“d”后面的“.Value”了吗。d、 值是一个double,应该可以编译。我的代码编译得很好。您添加的“为空”检查不会改变任何内容。您的代码仍然不正确myDouble
是一个null
,而IsNaN()
需要一个double
。您必须使用.Value
属性。啊!是的,这很有效。因此.value将使用它作为不可为null的类型。谢谢我错过了.value。你有没有检查过文档?说到这些事情,MSDN是你最好的朋友.Value
实际上返回实际的基础值Nullable
实际上只是一个T
和一个bool
。