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