C# 当我将双精度与零进行比较时,为什么Resharper会抱怨?

C# 当我将双精度与零进行比较时,为什么Resharper会抱怨?,c#,floating-point,resharper,C#,Floating Point,Resharper,如果我这样做 Resharper在比较d==0时抱怨“使用相等运算符比较浮点数。舍入值时可能会丢失精度。” 为什么??将精确的零表示为双精度或浮点数并不困难,对吗 我理解,如果我将此警告与其他值(如0.2)进行比较,则该值没有精确的二进制表示。Resharper不分析双变量是如何获得其值的 经过几次计算后,双精度值很少是精确的,因此resharper警告您,将双精度值与精确值进行比较不是一个好主意 double d = 0; if (d == 0) { ... } 通常用双精度计算是不精确

如果我这样做

Resharper在比较
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"))) {
}