我试图将一个数字除以另一个数字然后立即ceil()结果。这些通常是变量,但为了简单起见,我们坚持使用常量。
如果我尝试以下任何一项,当我想获得4时,我会得到3。
double num = ceil(25/8); // 3
float num = ceil(25/8); // 3
int num = ceil(25/8); // 3
我已经阅读了这里的几个主题(尝试了来自this thread的nextafter()建议)以及其他网站,我不明白发生了什么。我已经检查了,我的变量是我期望它们的数字,我实际上已经尝试了上面的,使用常量,并且仍然会得到意想不到的结果。
提前感谢您的帮助。我确信这是一件很简单的事情,我很想念,但此刻我很茫然。
答案 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);