从双精度转换为整数时的值更改

Value changing when converting from double to int

本文关键字:整数 双精度 转换      更新时间:2023-10-16

基本问题,代码非常大,但我的问题是,从本质上讲,它是基本的:

我有一个称为变量的双精度值,如果我使用 cout <<变量检查它,它会给我,例如,982。

下一行代码是 int intvariable = variable。

然后,当我用 cout <<intvariable 检查它时,我得到了 981。

有趣的是,这并不总是发生。对于 985,它可能保持在 985,但随后在 984 和 983,它将返回 983 和 982。我似乎根本无法弄清楚这一点。我尝试将其转换为浮点数,然后转换为整数,或转换为另一个双精度然后转换为整数。

我需要它作为 int,这样我就可以对它使用模运算符。

我应该指出,以前在代码中,双精度小于 1(即 0.987),然后乘以小数位数以使其成为真正的正整数(尽管,它在这一点上存储为双精度)。也许这与随机四舍五入有关?

将浮点值强制转换为int将截断(返回该值的下限),这可能会导致您的问题,因为浮点数本质上是不精确的。尝试对数字进行四舍五入,即 intvariable = (int)(0.5 + variable) .您可能还对 fmod 函数感兴趣,该函数计算浮点除法的余数(请参阅 http://www.cplusplus.com/reference/cmath/)。