在Python中将浮点数安全转换为整数的最佳方法?
Python的数学模块里有一些很实用的函数,比如 floor
和 ceil
。这两个函数可以处理小数,分别返回小数下面或上面最近的整数。不过,它们返回的结果还是小数形式。举个例子:
import math
f=math.floor(2.3)
现在 f
返回:
2.0
那么,有没有什么安全的方法可以把这个小数转换成整数,而不担心出现四舍五入的错误(比如当小数是1.99999时),或者我是不是应该用其他的函数呢?
9 个回答
60
你可以使用round函数。如果你不提供第二个参数(也就是有效数字的位数),那么我觉得你会得到你想要的效果。
IDLE的输出。
>>> round(2.99999999999)
3
>>> round(2.6)
3
>>> round(2.5)
3
>>> round(2.4)
2
155
使用 int(你的非整数数字)
就可以解决这个问题。
print int(2.3) # "2"
print int(math.sqrt(5)) # "2"
214
所有可以用浮点数表示的整数都有准确的表示方式。所以你可以放心地在结果上使用 int
。只有当你试图用一个不是2的幂的分母来表示一个有理数时,才会出现不准确的表示。
这个结果并不是那么简单!这是IEEE浮点数表示的一种特性,当我们讨论的数字足够小的时候,int
和floor
的组合会等于向下取整的结果,但也有其他的表示方式,可能会导致int(floor(2.3))
的结果是1。
引用自维基百科,
绝对值小于或等于224的任何整数都可以在单精度格式中准确表示,而绝对值小于或等于253的任何整数都可以在双精度格式中准确表示。