首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Resharper在我将double与0进行比较时会抱怨?

为什么Resharper在我将double与0进行比较时会抱怨?
EN

Stack Overflow用户
提问于 2012-05-21 19:28:09
回答 2查看 6.8K关注 0票数 18

如果我这样做了

代码语言:javascript
复制
double d = 0;
if (d == 0) {
  ...
}

Resharper在比较d == 0上抱怨“浮点数与相等运算符的比较。舍入值时可能会损失精度。”

为什么?将精确的零表示为双精度型或浮点型并不难,不是吗?

我理解这样的警告是相关的,如果我将其与其他一些值进行比较,例如0.2,它没有确切的二进制表示。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-21 19:36:40

Resharper不会分析double变量是如何获得值的。

经过几次计算后,双精度值很少是精确的,因此resharper警告您,将双精度值与精确值进行比较不是一个好主意。

代码语言:javascript
复制
double x = Math.Sqrt(2);
double d = x * x;

Console.WriteLine(d == 2);
票数 12
EN

Stack Overflow用户

发布于 2012-05-21 19:38:47

通常,使用双精度计算是不精确的。将双精度数与精确值进行比较可能会有问题。与intervallmight相比可能更安全。

代码语言:javascript
复制
if ((d > -0.000001) && (d < +0.000001)) {
   ...
}

在比较日期时也是如此

代码语言:javascript
复制
if ((date >= DateTime.parse("2012-05-21T00:00:00")) && 
   (date <= DateTime.parse("2012-05-21T23:59:59"))) {
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10684365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档