从double转换为int时的值更改

时间:2013-01-27 20:47:02

标签: c++ int double

基本问题,代码非常大,但我的问题是,它的核心是基本的:

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

下一行代码是int intvariable = variable。

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

有趣的是,这并不总是发生。 985它可能会保持在985,但随后是984和983,它将返回983和982.我似乎无法想象这一点。我已经尝试将它转换为浮点数然后转换为int,或转换为另一个double,然后转换为int。

我需要它作为int,所以我可以使用模数运算符。

我应该指出,以前在代码中double小于1(即0.987),然后再乘以小数位数,使其成为一个实数,正整数(但是,它存储为一个双精度整数仍然在那一点上)。也许这与随机舍入有关?

1 个答案:

答案 0 :(得分:2)

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

相关问题