将“整数”浮点数转换为int是否总是返回最近的整数?

11 投票
3 回答
6203 浏览
提问于 2025-05-11 02:23

我通过把两个数字相除来得到一个浮点数。我知道这两个数字是可以整除的,所以我得到的结果总是一个整数,只不过它的类型是浮点数(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,因为四舍五入的函数总是会返回一个准确的整数。

撰写回答