如果我这样做了
double d = 0;
if (d == 0) {
...
}
Resharper在比较d == 0
上抱怨“浮点数与相等运算符的比较。舍入值时可能会损失精度。”
为什么?将精确的零表示为双精度型或浮点型并不难,不是吗?
我理解这样的警告是相关的,如果我将其与其他一些值进行比较,例如0.2,它没有确切的二进制表示。
发布于 2012-05-21 19:36:40
Resharper不会分析double变量是如何获得值的。
经过几次计算后,双精度值很少是精确的,因此resharper警告您,将双精度值与精确值进行比较不是一个好主意。
double x = Math.Sqrt(2);
double d = x * x;
Console.WriteLine(d == 2);
发布于 2012-05-21 19:38:47
通常,使用双精度计算是不精确的。将双精度数与精确值进行比较可能会有问题。与intervallmight相比可能更安全。
if ((d > -0.000001) && (d < +0.000001)) {
...
}
在比较日期时也是如此
if ((date >= DateTime.parse("2012-05-21T00:00:00")) &&
(date <= DateTime.parse("2012-05-21T23:59:59"))) {
}
https://stackoverflow.com/questions/10684365
复制相似问题