【问题标题】:C# strange behavior with + operator [duplicate]+运算符的C#奇怪行为[重复]
【发布时间】:2015-04-22 16:35:00
【问题描述】:

谁能告诉我为什么以下语句的计算结果为假?

bool myBoolean = .6 + .3 + .1 == .1 + .3 + .6; // false

它在 Javascript 和 C++ 中做同样的事情。

【问题讨论】:

  • 浮点运算?
  • 请注意,在任何算术之后测试浮点相等性通常是一个坏主意
  • 使用正确的类型decimalbool myBoolean = .6m + .3m + .1m == .1m + .3m + .6m;
  • 永远不要相信浮点相等比较。您可以将示例简化为 bool myBoolean = .1 == .1;
  • @CallumBradbury:我无法复制你所说的。 bool myBoolean = .1 == .1; 为我返回 true。这令人困惑,因为高度赞成的重复问题也说明了这一点。

标签: javascript c# c++


【解决方案1】:

注意。我正在回答这个问题,因为它也被标记为 C++

由于浮点表示错误,在 C++ 中,上述结果为 false,因为两个浮点数并不完全相等。

例如0.1 的内部表示接近该值,但不完全是

C# 也是如此。

请允许我链接一个著名的文档,(恕我直言)每个处理浮点运算的程序员都应该阅读:What Every Computer Scientist Should Know About Floating-Point Arithmetic

【讨论】:

    【解决方案2】:

    ]永远不要相信Floating-Point Arithmetic。在转换过程中,您可能会丢失精度。这就是为什么结果是错误的。我建议您尝试使用以十进制表示法存储数字的十进制类型。因此,您的数字将可以精确表示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-06
      • 2013-11-14
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多