在Python中使用floor除法分割负数
我对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