3

我试图将一个数字除以另一个数字,然后立即 ceil() 结果。这些通常是变量,但为简单起见,让我们坚持使用常量。

如果我尝试以下任何一项,当我想获得 4 时,我会获得 3。

double num = ceil(25/8); // 3
float num = ceil(25/8); // 3
int num = ceil(25/8); // 3

我已经阅读了这里的几个线程(尝试了这个线程的 nextafter() 建议)以及其他站点,但我不明白发生了什么。我已经检查过了,我的变量是我期望的数字,实际上我已经尝试了上述方法,使用常量,但仍然得到意想不到的结果。

在此先感谢您的帮助。我敢肯定,我错过了一些简单的事情,但此时我不知所措。

4

2 回答 2

14

这是因为您正在做整数运算。在您调用 之前,该值为 3 ceil,因为 25 和 8 都是整数。首先使用整数算术计算 25/8,计算结果为 3。

尝试:

double value = ceil(25.0/8);

这将确保编译器将常量 2​​5.0 视为浮点数。

您还可以使用显式强制转换来获得相同的结果:

double value = ceil(((double)25)/8);
于 2012-10-16T20:23:14.347 回答
4

这是因为表达式在作为参数传递给 ceil 函数之前进行了评估。您需要先将其中一个转换为双精度,因此结果将是一个小数,将传递给 ceil。

double num = ceil((double)25/8);
于 2012-10-16T20:25:21.353 回答