0

我在 C++ 中工作,并且在双精度读取方面存在问题

input_file>>temp_double;

文件中的数字类似于 1234.567,但当它读入时,它读取为 1234.56699999999。那么我怎样才能让它在文件中读取,我在后面的函数中使用小数的数量,所以我需要它是正确的。文件中的数字范围为小数点后 3-5 位

4

2 回答 2

2

正如其他人所说, adouble不能精确地表示许多十进制值。它以二进制形式存储其数据,并最终四舍五入。许多可以用十进制精确表示的数字在二进制中具有非终止表示。

如果您需要精确表示,请查看例如Boost::Multiprecision

于 2013-10-05T17:40:30.803 回答
0

floatdouble使用存储符号位、指数和小数值的 IEEE 标准存储它们的数据。由于小数部分的基数为 10 到基数 2 的转换,大多数十进制值在存储时不会完全精确。

此外,数学上,1234.566999999999999.... = 1234.567

于 2013-10-05T17:42:20.707 回答