将铸造一个"整数" float to int总是返回最接近的整数?

时间:2015-11-25 13:42:23

标签: python

我通过划分两个数字得到一个浮点数。我知道数字是可分的,所以我总是有一个整数,只有它的类型为float。但是,我需要一个实际的int类型。我知道int()删除了小数(即地板舍入)。我担心,因为浮标不准确,如果我这样做,例如int(12./3)int(round(12./3))它可能最终为3而不是4,因为4的浮点表示可能是3.9999999593519561(它不是,只是一个示例)。

这会发生吗?我能否确定它不会?

(我问,因为在重塑一个numpy数组时,我收到一个警告,说形状必须是整数,而不是浮点数。)

3 个答案:

答案 0 :(得分:4)

float投射到integer会截断该值,因此,如果您有3.999998,并将其转换为integer,则会获得3

防止这种情况的方法是对结果进行舍入。 int(round(3.99998)) = 4,因为round函数总是返回一个精确的整数值。

答案 1 :(得分:1)

可以通过向相关值添加0.5来模拟舍入。例如:

>>> int(3.4)
3
>>> int(3.7)
3
>>> int(3.4 + 0.5)  # 3.9
3
>>> int(3.7 + 0.5)  # 4.2
4

答案 2 :(得分:1)

我最后使用了整数除法(a//b),因为我将整数除了。如果我分开,就行不通3.5 / 0.5 = 7虽然。