将“整数”浮点数转换为int是否总是返回最近的整数?
我通过把两个数字相除来得到一个浮点数。我知道这两个数字是可以整除的,所以我得到的结果总是一个整数,只不过它的类型是浮点数(float)。但是,我需要的是一个真正的整数类型(int)。我知道用 int()
可以去掉小数部分(也就是向下取整)。我有点担心,因为浮点数不是完全准确的,如果我做比如 int(12./3)
或者 int(round(12./3))
,结果可能会是3而不是4,因为浮点数表示的4可能会是3.9999999593519561(这只是个例子,并不是真的)。
这种情况会发生吗?我怎么才能确保它不会发生呢?
(我问这个是因为在调整一个numpy数组的形状时,收到了一个警告,提示形状必须是整数,而不是浮点数。)
相关文章:
- 暂无相关问题
3 个回答
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
1
我最后使用了整数除法(a//b
),因为我除的是整数。如果我除的是小数,比如3.5/0.5=7,那就不行了。
6
把一个float
(浮点数)转换成integer
(整数)的时候,会把小数部分去掉。所以如果你有3.999998
,转换成整数后就变成了3
。
要避免这种情况,可以先把数字四舍五入。比如int(round(3.99998)) = 4
,因为四舍五入的函数总是会返回一个准确的整数。