在Python中将浮点数安全转换为整数的最佳方法?

279 投票
9 回答
828352 浏览
提问于 2025-04-16 02:11

Python的数学模块里有一些很实用的函数,比如 floorceil。这两个函数可以处理小数,分别返回小数下面或上面最近的整数。不过,它们返回的结果还是小数形式。举个例子:

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浮点数表示的一种特性,当我们讨论的数字足够小的时候,intfloor的组合会等于向下取整的结果,但也有其他的表示方式,可能会导致int(floor(2.3))的结果是1。

引用自维基百科

绝对值小于或等于224的任何整数都可以在单精度格式中准确表示,而绝对值小于或等于253的任何整数都可以在双精度格式中准确表示。

撰写回答