在Python中使用floor除法分割负数

4 投票
1 回答
4972 浏览
提问于 2025-04-17 13:43

我对Python中用//进行整数除法或用floordiv处理负数的方式感到困惑。

>>> -5 // 2
-3
>>> int(-5/2)
-2

为什么floordiv()会向下舍入到-3呢?我以为整数除法只是简单地去掉小数点后的部分(或者说不考虑小数部分)而已。

1 个回答

10

在算术中,floor 函数的意思是“不大于给定数字的最大整数”。比如说,-2.5 这个数字,最大的整数不大于它就是 -3,所以你看到的结果是正常的。

可以这样理解,floordiv 总是向下取整(在数轴上向左),但它是基于实际的数字值(-2.5),而不是它的绝对值(2.5)。

想了解更多,可以去维基百科看看关于 地板和天花板函数 的内容。

另外,你提到的这种行为在 Python 的标准库里可以通过 math.trunc() 函数实现。

>>> from math import trunc
>>> trunc(-2.5)
-2

撰写回答