可能重复:
Why do Python's math.ceil() and math.floor() operations return floats instead of integers?
来自math.ceil
...
数学。的小区(x)的
将 x 的上限作为浮点数返回,最小整数值大于或等于 x 。
他们为什么认为float
更好?毕竟,数字的ceil定义为整数,需要实数的操作可以轻松地从int
转换为float
,但不一定相反,例如{{1} }}。
答案 0 :(得分:1)
这是所有数学库中存在的奇怪现象。需要说明的是,表示整数的浮点数与整数不同(例如,它们甚至可能超过64位整数的范围)。例如,通常在计算中继续使用这些数字。然后,无论如何,它们必须再次转换为浮点数。
答案 1 :(得分:0)
浮点数不适合整数,因此如果返回整数,函数将失败。返回与参数相同的类型可确保结果适合。
编辑:尽管Python可以表示非常大的整数,但情况并非总是如此。我不知道什么时候引入了长整数,但是直到2.4版它们都没有很好地与常规整数混合。我假设在引入长整数之前math.ceil
已经存在,但我没有足够的Python历史来确定。
从浮点到整数的转换也会带来一些惊喜。通过将ceil
函数与int
转换分开,可以很容易地看出哪个部分是意外的来源。
>>> math.ceil(1e23)
1e+23
>>> int(math.ceil(1e23))
99999999999999991611392L