从文件中读取浮点值会丢弃全部或部分小数部分

时间:2015-03-21 22:55:26

标签: c++ floating-point fstream ifstream

我需要从文件中读取浮点值。

我如何执行此操作的基本示例代码:

int main() 
{
float number;
ifstream inputFile;

inputFile.open("testfile.dat");

inputFile >> number;

cout << number << endl;

return 0;
}

文件中的第一行是:13212.13131 但当我输入“数字”时,显示的数字是:13212.1 问题是小数被删除的一部分,在其他情况下,所有这些都被删除。为什么会发生这种情况,我该如何解决这个问题?

从文件中读取数字的要点是用它进行数学计算。

2 个答案:

答案 0 :(得分:3)

首先,浮点输出默认为6位十进制数。您需要std::setprecision()才能打印更多数字。但是你会达到浮动类型的极限。

在大多数系统中,float为IEEE-754 single precision,因此它只能存储大约7位有效数字。最近的13212.13131是1.3212130859375E4。如果您需要更高的精度,则必须使用double,它在大多数系统上具有大约15-16位的精度。

了解详情:Is floating point math broken?

答案 1 :(得分:1)

尝试使用std::setprecision()

cout << setprecision(14) << number << endl;

你需要

#include <iomanip>

如果没有解决问题,您应该尝试对其进行调试并查看实际数字(13212.1313113212.1)。