4

基本问题,代码很大,但我的问题是,核心是基本的:

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

下一行代码是 int intvariable = variable。

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

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

我需要它作为一个整数,所以我可以使用它的模运算符。

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

4

1 回答 1

3

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

于 2013-01-27T21:00:03.407 回答