【问题标题】:C++ double divided by double results in rounded number [duplicate]C++ double 除以 double 得到舍入数字 [重复]
【发布时间】:2021-12-18 13:25:34
【问题描述】:

我有以下计算:

    double a = 141150, b = 141270, c = 141410;
    double d = (a + b + c) / 3;
    cout << d << endl;

输出显示d = 141277,而d 应该是141276.666667。计算包括双加和双除。为什么我得到一个四舍五入的结果?顺便说一句 d = (a + b + c) / 3.0 没有帮助。

但是在另一个类似的计算中,结果是正确的:

    double u = 1, v = 2, x = 3, y = 4;
    double z = (u + v + x + y) / 4;

z 按预期生成2.5。这两个计算本质上是一样的,但是为什么会有不同的行为呢?

最后,我知道 C++ 会自动截断转换为较低精度的数字,但我从未听说过自动舍入。有人能解释一下吗?

【问题讨论】:

  • 试试cout &lt;&lt; std::fixed &lt;&lt; d &lt;&lt; endl
  • 我相信默认精度是 6 位小数。
  • 你需要区分double本身的精度和输出流的精度...
  • 除了设置std::fixed(或结合使用),您还可以提高流的精度,例如std::setprecision(15) – 旁注:使用 20 时,double 的舍入效果可见...
  • 流插入器 operator&lt;&lt; 用于浮点类型,默认情况下显示六位数字。

标签: c++ c++11


【解决方案1】:

Here 您可以使用代码 sn-ps 作为示例找到同一问题的多个答案。它确实包括那些家伙在 cmets 中所说的

【讨论】:

  • 如果你发现另一个问题相同,你应该提出一个重复的标志,而不是创建一个答案
  • 对不起,伙计,不太熟悉如何做到这一点。感谢@AlanBirtles 的留言
猜你喜欢
  • 2020-03-08
  • 2011-02-18
  • 2013-07-23
  • 2014-11-16
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多