ceil()没有像我预期的那样工作

时间:2012-10-16 20:21:08

标签: objective-c ios

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

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

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

我已经阅读了这里的几个主题(尝试了来自this thread的nextafter()建议)以及其他网站,我不明白发生了什么。我已经检查了,我的变量是我期望它们的数字,我实际上已经尝试了上面的,使用常量,并且仍然会得到意想不到的结果。

提前感谢您的帮助。我确信这是一件很简单的事情,我很想念,但此刻我很茫然。

2 个答案:

答案 0 :(得分:12)

这是因为你正在进行整数运算。在调用ceil之前,该值为3,因为25和8都是整数。首先使用整数运算计算25/8,评估为3。

尝试:

double value = ceil(25.0/8);

这将确保编译器将常量25.0视为浮点数。

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

double value = ceil(((double)25)/8);

答案 1 :(得分:4)

这是因为表达式在作为参数传递给ceil函数之前被计算。您需要先将其中一个转换为double,这样结果将是一个小数,将传递给ceil。

double num = ceil((double)25/8);