即使是经验丰富的程序员有时也会像这样编写 C# 代码:
double x = 2.5;
double y = 3;
if (x + 0.5 == 3) {
// this will never be executed
}
基本上,众所周知,由于计算机处理浮点运算的方式,两个 double (或 float )永远不可能彼此精确相等。
问题是,每个人都知道这一点,但像这样的代码仍然到处都是。这很容易被忽视。
给你的问题:
- 您的开发组织是如何处理这个问题的?
- 如果有人比较两个 double / float ,编译器是否应该检查我们是否应该大声尖叫让 VS2010 包含编译时警告,这是一件很常见的事情吗?
更新:各位,感谢您的评论。我想澄清一下,我当然明白上面的代码是不正确的。是的,你永远不想 == 比较 double 和 float 。相反,您应该使用基于 epsilon 的比较。这很明显。这里真正的问题是“你如何查明问题所在”,而不是“你如何解决技术问题”。
最佳答案
浮点值当然可以彼此相等,并且在您指定的情况下它们总是将相等。您应该几乎永远不要使用 equals 来比较是否相等,但您确实需要了解原因 - 以及为什么您展示的示例不合适。
我认为编译器不一定要警告它,但您可能想看看 FxCop 是否可以识别它。我在 warning list 中看不到它,但它可能就在某处……
就我个人而言,我有理由相信有能力的开发人员能够在代码审查中发现这一点,但这确实依赖于您一开始就进行代码审查。它还依赖于您的开发人员知道何时使用 double
以及何时使用 decimal
,但我发现情况并非如此...
关于c# - 在 Visual Studio 中比较 double - 捕捉这个的标准方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1865450/