为什么round()和ceil()不返回整数?

时间:2009-08-10 08:16:09

标签: c++ c casting rounding

有一段时间,我发现自己将一些数字四舍五入,而且我总是要将结果转换为整数:

int rounded = (int) floor(value);

为什么所有舍入函数(ceil()floor())都返回一个浮点数,而不是整数?我发现这非常不直观,并希望得到一些解释!

2 个答案:

答案 0 :(得分:66)

这些函数返回的整数值可能太大而无法存储在整数类型(int,long等)中。为了避免产生未定义结果的溢出,应用程序应该在将返回值赋给整数类型之前对返回值执行范围检查。

来自ceil(3)Linux手册页。

答案 1 :(得分:27)

那是因为float的范围比int宽。如果这些函数返回的值不适合int,您会期望得到什么?这将是未定义的行为,您将无法在程序中检查它。