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

Woo*_*kai 59 c c++ casting rounding

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

int rounded = (int) floor(value);
Run Code Online (Sandbox Code Playgroud)

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

Sea*_*ney 67

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

来自ceil(3)Linux手册页.


sha*_*oth 28

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

  • 不需要存在任何未定义的行为 - 在这种情况下,函数*可以被指定为返回错误值,就像strtol()一样,如果要转换的数字不适合long.原因很简单,如果将函数限制在int的范围内,那么函数就没那么有用了. (12认同)