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

2 投票
2 回答
3516 浏览
提问于 2025-04-17 12:31

可能是重复的问题:
为什么Python的math.ceil()和math.floor()操作返回浮点数而不是整数?

来自Python文档的math.ceil内容...

math.ceil(x)
    返回x的上限值,作为一个浮点数,即大于或等于x的最小整数值。

为什么他们认为float更好呢?毕竟,数字的上限值按定义是一个整数,而需要真实数字的操作可以很容易地从int转换为float,但不一定能反向转换,比如在[0] * ceil(x)的情况下。

2 个回答

1

这是一个在所有数学库中都存在的奇怪现象。首先要说明的是,浮点数表示的整数和实际的整数是不同的(比如,浮点数可能会超出64位整数的范围)。通常情况下,你会继续用这些数字进行计算。最后,它们还是得转换回浮点数。

0

有些浮点数是无法转成整数的,如果函数返回一个整数,就会出问题。返回和输入参数相同类型的结果,可以确保结果是合适的。

编辑:虽然Python可以表示非常大的整数,但这并不是一直如此。我不太清楚长整型是什么时候引入的,但在2.4版本之前,长整型和普通整型的混合使用并不好。我猜math.ceil这个函数在长整型出现之前就已经存在了,但我对Python的历史了解不够,不能确定。

从浮点数转换为整数时,可能会有一些意外情况。通过将ceil函数和int转换分开,可以很清楚地看到哪个部分引发了这些意外。

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

撰写回答