从文件中读取浮点值会删除小数部分的全部或部分
Reading floating point values from a file drops all or part of the decimal part
我需要从文件中读取浮点值。
我如何做到这一点的基本示例代码:
int main()
{
float number;
ifstream inputFile;
inputFile.open("testfile.dat");
inputFile >> number;
cout << number << endl;
return 0;
}
文件中的第一行是:13212.13131。但当我计算"数字"时,显示的数字是:13212.1
问题是部分小数被丢弃,而在其他情况下,所有小数都被丢弃。为什么会发生这种情况,我该如何解决这个问题?
从文件中读取数字的目的是用它进行数学计算。
首先,输出的浮点精度(对于std::cout
和printf
)默认为小数点后6位。你需要std::setprecision()
让它打印更多的数字。但是你会达到float
类型的极限。
在大多数系统中,浮点是IEEE-754单精度的,因此它只能存储大约7位有效数字。最接近13212.13131的是1.3212130859375E4。如果你需要更高的精度,你必须使用双精度,在大多数系统中,双精度约为15-16位。
阅读更多:浮点数学坏了吗?
尝试使用std::setprecision()
:
cout << setprecision(14) << number << endl;
你需要
#include <iomanip>
如果这还不能解决问题,你应该试着调试它,看看实际的数字是多少(13212.13131
或13212.1
)。
相关文章:
- C++将浮点指针值舍入为小数位数
- 从给定的 I 和 D 序列中形成最小数
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 如何将部分流作为参数传递
- 使用 std::index_sequence 初始化具有固定大小数组成员的 POD 结构容器
- 计算 PI 最多 42 位小数
- 为什么我必须添加一个小数才能在C++中正确计算此数学
- 返回浮点数的小数位数
- 为什么 std::cout 打印浮点数、双精度和长双精度到相同的小数精度?
- 有没有办法修改'operator->',以便'z->im'返回复数的虚部
- 在数学上将浮点数四舍五入到 N 位小数
- 打印双精度的整个非小数部分
- 声明后,gcc 的动态大小数组是否与标准数组有效相同?
- 如何在C++中对OpenCV垫的小数进行四舍五入?
- 如何删除部分类?
- 将 int 数组转换为带有小数C++的双精度数组
- Arduino如何制作返回固定大小数组的函数
- 从浮点数中删除小数部分但保留类型的有效方法
- 从文件中读取浮点值会删除小数部分的全部或部分
- 如何在c++中存储纬度的小数部分为4 unsigned char