为什么Python的math.ceil()和math.floor()返回浮点数而不是整数?

188 投票
9 回答
123383 浏览
提问于 2025-04-17 08:44

有人能解释一下这个吗(直接来自文档,强调部分是我加的):

math.ceil(x) 返回 x 的上限值,以浮点数形式表示,即大于或等于 x 的最小的 整数 值。

math.floor(x) 返回 x 的下限值,以浮点数形式表示,即小于或等于 x 的最大的 整数 值。

为什么 .ceil.floor 要返回浮点数,而它们的定义本来是要计算整数呢?


编辑:

嗯,这里有一些很好的理由说明它们应该返回浮点数,我刚开始适应这个想法,结果@jcollado指出在 Python 3 中它们实际上确实返回整数...

9 个回答

20

因为Python的数学库其实是对C语言数学库的一个简单封装,而C语言的数学库返回的是浮点数。

117

正如其他回答所提到的,在Python中返回浮点数(小数)可能是出于历史原因,以避免溢出的问题。不过在Python 3中,它们返回的是整数。

>>> import math
>>> type(math.floor(3.1))
<class 'int'>
>>> type(math.ceil(3.1))
<class 'int'>

你可以在PEP 3141中找到更多信息。

107

浮点数的范围通常比整数的范围要大。通过返回浮点值,函数可以为那些超出整数表示范围的输入值返回一个合理的结果。

想想看:如果 floor() 返回的是一个整数,那么 floor(1.0e30) 应该返回什么呢?

现在,Python 的整数可以表示任意大小,但以前并不是这样。标准库的函数其实就是对相应的 C 语言库函数的简单封装。

撰写回答