有一段时间,我发现自己将一些数字四舍五入,而且我总是要将结果转换为整数:
int rounded = (int) floor(value);
为什么所有舍入函数(ceil()
,floor()
)都返回一个浮点数,而不是整数?我发现这非常不直观,并希望得到一些解释!
答案 0 :(得分:66)
这些函数返回的整数值可能太大而无法存储在整数类型(int,long等)中。为了避免产生未定义结果的溢出,应用程序应该在将返回值赋给整数类型之前对返回值执行范围检查。
来自ceil(3)Linux手册页。
答案 1 :(得分:27)
那是因为float
的范围比int
宽。如果这些函数返回的值不适合int
,您会期望得到什么?这将是未定义的行为,您将无法在程序中检查它。