为什么从文件中读取浮点数会产生舍入输出?

时间:2011-02-14 02:24:16

标签: c++

我有一个文件,下面显示了两个输入:

  

34.800287000 0.077352000

我正在读取文件(通过getline然后定义stringstream)并将其保存在我的类变量中,这些变量都定义为 double 。然而 当我检查我的变量时,我看到了:

  

34.8003 0.077352

编辑:我正在使用cout检查我的变量。

为什么会这样?

感谢。

2 个答案:

答案 0 :(得分:5)

标准IO流类的精度有限,可以在运行时自定义。默认情况下,我相信这是六个位置,它与您获得的输出相匹配。如果要提高精度,可以使用setprecision流操纵器:

double myValue = /* ... */
cout << setprecision(12) << myValue << endl; // Print with higher precision

setprecision操纵器在<iomanip>中定义,一旦使用,将更改cout的行为,以便在程序的其余部分以更高的精度打印,在您的情况下可能是很有帮助。试试这个,看看你的数字是否真的失去精确度。

答案 1 :(得分:2)

使用cout打印时,您的数字将会四舍五入。如果您想查看更多小数,请使用标题std::setprecision中的iomaniphttp://www.cplusplus.com/reference/iostream/manipulators/setprecision/