我有 3.4 的两倍。但是,当我将它与 100 相乘时,它给出的是 339 而不是 340。这似乎是由 double 的精度引起的。我该如何解决这个问题?
谢谢
最佳答案
首先是怎么回事:
- 3.4 不能精确表示为二进制小数。因此,实现选择最接近的可表示二进制分数。我不确定它是否总是向零舍入,但在您的情况下,表示的数字确实较小。
- 转换为整数截断,即使用最接近绝对值较小的整数。
- 由于两种转换都偏向同一个方向,因此您总是会遇到舍入误差。
现在你需要知道你想要什么,但你可能想使用对称舍入,即找到最接近的整数,无论是更小还是更大。这可以实现为
#include <cmath>
int round(double x) { std::floor(x + 0.5); } // floor is provided, round not
或
int round(double x) { return x < 0 ? x - 0.5 : x + 0.5; }
我不完全确定它确实是向零四舍五入,所以如果你使用它请稍后验证。
关于c++ - double 与整数精度的乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6041295/