【发布时间】:2013-01-11 04:53:31
【问题描述】:
基本问题,代码很大,但我的问题是基本的:
我有一个称为变量的双精度值,如果我用 cout
下一行代码是 int intvariable = variable。
然后,当我用 cout
有趣的是,这并不总是发生。使用 985,它可能会保持在 985,但在 984 和 983 时,它将返回 983 和 982。我似乎根本无法弄清楚这一点。我尝试将其转换为浮点数,然后转换为 int,或者转换为另一个 double,然后转换为 int。
我需要它作为一个整数,所以我可以使用它的模运算符。
我应该指出,之前在代码中双精度小于 1(即 0.987),然后乘以小数位数使其成为一个实数正整数(不过,它存储为双精度还在那个时候)。也许这与随机舍入有关?
【问题讨论】:
-
我以前看过那个页面,我了解浮点数,但我仍然不知所措。为什么当我要求用 cout 查看数字(虽然它仍然是双精度数)时,它给了我 - 正是 - 我希望看到的数字,但在将其视为 int 时,它是不同的。我没有在两者之间做任何数学运算。
-
正如您在问题中提到的,您的问题是四舍五入。不过,我不知道你为什么说“随机取整”。
-
使用
cout格式您的号码打印。请务必理解这意味着什么。 -
浮点问题通常会导致像“5”这样的东西并不是真正的“5”,而是“5.00000008”之类的东西。如果你是准确的,这可能会很麻烦。在我的情况下,我有一个 double,其值为 955,但是当我将其转换为 int 时,它会丢失整个 1 的位置值,并下降到 954。你可以代表每个非十进制数作为一个整数,为什么我的程序似乎不能理解 955 = 955?它不应该采用浮点数(比如作为双精度数,955 实际上是 954.99999997 或其他东西),并将其作为整数 954。