为什么math.ceil返回浮点数?

时间:2012-02-07 16:32:33

标签: python language-design

  

可能重复:
  Why do Python's math.ceil() and math.floor() operations return floats instead of integers?

来自math.ceil ...

的Python文档
  

数学。的小区(x)的
  将 x 的上限作为浮点数返回,最小整数值大于或等于 x

他们为什么认为float更好?毕竟,数字的ceil定义为整数,需要实数的操作可以轻松地从int转换为float,但不一定相反,例如{{1} }}。

2 个答案:

答案 0 :(得分:1)

这是所有数学库中存在的奇怪现象。需要说明的是,表示整数的浮点数与整数不同(例如,它们甚至可能超过64位整数的范围)。例如,通常在计算中继续使用这些数字。然后,无论如何,它们必须再次转换为浮点数。

答案 1 :(得分:0)

浮点数不适合整数,因此如果返回整数,函数将失败。返回与参数相同的类型可确保结果适合。

编辑:尽管Python可以表示非常大的整数,但情况并非总是如此。我不知道什么时候引入了长整数,但是直到2.4版它们都没有很好地与常规整数混合。我假设在引入长整数之前math.ceil已经存在,但我没有足够的Python历史来确定。

从浮点到整数的转换也会带来一些惊喜。通过将ceil函数与int转换分开,可以很容易地看出哪个部分是意外的来源。

>>> math.ceil(1e23)
1e+23
>>> int(math.ceil(1e23))
99999999999999991611392L