我正在使用C ++,并且在双重阅读的精确度方面存在问题
input_file>>temp_double;
文件中的数字类似于1234.567但是当它读入时,它的读数为1234.56699999999。那么我怎样才能让它在文件中读取,我在后面的函数中使用小数位,所以我需要它是正确的。文件中的数字范围为3-5位小数
答案 0 :(得分:2)
正如其他人所说,double
不能精确地代表许多小数值。它以二进制形式存储数据,最终完成舍入。许多可以用十进制精确表示的数字都有二进制的非终止表示。
如果您需要精确的表示,请查看例如Boost::Multiprecision。
答案 1 :(得分:0)
float
和double
使用存储符号位,指数和小数值的IEEE标准存储其数据。由于小数部分的基数为10到2的转换,大多数十进制值在存储时不会精确精确。
另外,数学上,1234.566999999999999 .... = 1234.567