Setprecision令人困惑

Mar*_*Tan 12 c++

我只是想问一下setprecision,因为我有点困惑.

这是代码:

#include <iostream>
#include <iomanip>
using namespace std;

int main()

{
  double rate = x;
  cout << fixed << setprecision(2) << rate;
}
Run Code Online (Sandbox Code Playgroud)

其中x =以下:

等式的左边是x的值.

1.105 = 1.10应为1.11

1.115 = 1.11应为1.12

1.125 = 1.12应为1.13

1.135 = 1.14这是正确的

1.145 = 1.15也正确

但如果x是:

2.115 = 2.12这是正确的

2.125 = 2.12应为2.13

那么为什么在某个值上它是正确的但有时它是错的?

请赐教.谢谢

NPE*_*NPE 8

没有理由期望使用浮点系统可以准确表示帖子中的任何常量.因此,一旦将它们存储在double变量中,您所拥有的精确半部可能不再是精确的一半(无论iostream如何对这些数字进行舍入.)

以下代码说明了我的观点:

#include <iostream>
#include <iomanip>

using namespace std;

int main()

{
  double rate = 1.115;
  cout << fixed << setprecision(20) << rate;
}
Run Code Online (Sandbox Code Playgroud)

输出:

1.11499999999999999112
Run Code Online (Sandbox Code Playgroud)

我建议看一下FAQ.