从文件中读取浮点值会删除小数部分的全部或部分

Reading floating point values from a file drops all or part of the decimal part

本文关键字:小数部 全部 删除 文件 读取      更新时间:2023-10-16

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

我如何做到这一点的基本示例代码:

int main() 
{
    float number;
    ifstream inputFile;
    inputFile.open("testfile.dat");
    inputFile >> number;
    cout << number << endl;
    return 0;
}

文件中的第一行是:13212.13131。但当我计算"数字"时,显示的数字是:13212.1

问题是部分小数被丢弃,而在其他情况下,所有小数都被丢弃。为什么会发生这种情况,我该如何解决这个问题?

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

首先,输出的浮点精度(对于std::coutprintf)默认为小数点后6位。你需要std::setprecision()让它打印更多的数字。但是你会达到float类型的极限。

在大多数系统中,浮点是IEEE-754单精度的,因此它只能存储大约7位有效数字。最接近13212.13131的是1.3212130859375E4。如果你需要更高的精度,你必须使用双精度,在大多数系统中,双精度约为15-16位。

阅读更多:浮点数学坏了吗?

尝试使用std::setprecision():

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

你需要

#include <iomanip>

如果这还不能解决问题,你应该试着调试它,看看实际的数字是多少(13212.1313113212.1)。