我正在解决一些c++问题,应该输出22258199.5000000这个数字,我已经将结果存储在 double 据类型中,当我尝试使用std::cout打印该变量时,它四舍五入到22258200.0000000,我不知道为什么这是发生的事吗?有人能解释一下吗?我该怎么做才能避免这个问题?
最佳答案
32 位 float
类型可容纳大约 7 位十进制数字,超出该数字的任何内容都将四舍五入到最接近的可表示值。
64 位 double
类型可保存大约 15 位十进制数字,并且还会对超出该数字的值进行四舍五入。
由于您的值四舍五入到最接近的 7 位数字,因此您似乎在某处使用了 float
变量。将 float
值复制到 double
不会恢复丢失的数字。
这不适用于您的示例,但可能适用于其他示例 - 舍入以二进制而不是十进制形式进行,因此您最终可能会得到一个似乎包含比我上面指出的更多数字的值。只需知道只有前 7 或 15 的十进制数才是准确的。
关于c++ - 如何避免对大浮点或 double 值进行舍入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32231777/