为什么math.ceil返回浮点数?
来自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