我通过划分两个数字得到一个浮点数。我知道数字是可分的,所以我总是有一个整数,只有它的类型为float。但是,我需要一个实际的int类型。我知道int()
删除了小数(即地板舍入)。我担心,因为浮标不准确,如果我这样做,例如int(12./3)
或int(round(12./3))
它可能最终为3而不是4,因为4的浮点表示可能是3.9999999593519561(它不是,只是一个示例)。
这会发生吗?我能否确定它不会?
(我问,因为在重塑一个numpy数组时,我收到一个警告,说形状必须是整数,而不是浮点数。)
答案 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虽然。