C# 当我将双精度与零进行比较时,为什么Resharper会抱怨?
如果我这样做 Resharper在比较C# 当我将双精度与零进行比较时,为什么Resharper会抱怨?,c#,floating-point,resharper,C#,Floating Point,Resharper,如果我这样做 Resharper在比较d==0时抱怨“使用相等运算符比较浮点数。舍入值时可能会丢失精度。” 为什么??将精确的零表示为双精度或浮点数并不困难,对吗 我理解,如果我将此警告与其他值(如0.2)进行比较,则该值没有精确的二进制表示。Resharper不分析双变量是如何获得其值的 经过几次计算后,双精度值很少是精确的,因此resharper警告您,将双精度值与精确值进行比较不是一个好主意 double d = 0; if (d == 0) { ... } 通常用双精度计算是不精确
d==0
时抱怨“使用相等运算符比较浮点数。舍入值时可能会丢失精度。”
为什么??将精确的零表示为双精度或浮点数并不困难,对吗
我理解,如果我将此警告与其他值(如0.2)进行比较,则该值没有精确的二进制表示。Resharper不分析双变量是如何获得其值的 经过几次计算后,双精度值很少是精确的,因此resharper警告您,将双精度值与精确值进行比较不是一个好主意
double d = 0;
if (d == 0) {
...
}
通常用双精度计算是不精确的。将double与精确值进行比较可能会有问题。与间隔相比,间隔可能更安全
double x = Math.Sqrt(2);
double d = x * x;
Console.WriteLine(d == 2);
if((d>-0.000001)和&(d<+0.000001)){
...
}
这同样适用于比较日期
if ((d > -0.000001) && (d < +0.000001)) {
...
}
if((date>=DateTime.parse(“2012-05-21T00:00:00”))和
(日期在Alt+Enter菜单上。在本例中:
使用==
运算符比较浮点数通常是,
一个坏主意。这个问题产生于这样一个事实,通常是结果
计算的数量必须“拟合”到浮点
代表性,并不总是与感知的现实相匹配
应该产生什么样的结果
我不知道,但是如果你比较如果(d==0.0)
,会发生什么?会更没用,但会是double&double。请删除更多像zero这样没用的标记并添加你的语言。谢谢
if ((date >= DateTime.parse("2012-05-21T00:00:00")) &&
(date <= DateTime.parse("2012-05-21T23:59:59"))) {
}