表达式6 // 4
产生1
,其中除法除以数字后产生整数。
但是如果数字为负数,为什么-6 // 4
会返回-2
?
答案 0 :(得分:6)
//
运算符明确 floor 结果。引用Binary arithmetic operations documentation:
结果是数学除法,其中'floor'函数应用于结果。
地板与舍入为0不同;地板总是移动到较低的整数值。请参阅math.floor()
function:
返回 x 的最低值,小于或等于 x 的最大整数。
对于-6 // 4
,首先计算-6 / 4
的结果,-1.5
。然后,地板移动到较低的整数值,因此-2
。
如果你想要向零舍入,你必须明确地这样做;您可以使用真正除法的int()
函数执行此操作:
>>> int(-6 / 4)
-1
int()
删除小数部分,因此总是向零舍入。
答案 1 :(得分:2)
地板分割也将向下舍入到下一个最低数字,而不是下一个最低绝对值。
6 // 4 = 1.5
,向下舍入为1,最多为2。
-6 // 4 = -1.5
,向下舍入为-2,最高为-1。
答案 2 :(得分:0)
//
是一个"底层部门"运营商。这意味着这种划分的结果是常规划分结果的底限(用/运算符执行)。
给定数字的最大值是小于此数字的最大整数。例如
7 / 2 = 3.5 so 7 // 2 = floor of 3.5 = 3.
对于负数,它不太直观:-7 / 2 = -3.5,
所以-7 // 2 = floor of -3.5 = -4
。同样-1 // 10 = floor of -0.1 = -1.
//
被定义为与math.floor()
做同样的事情:返回小于或等于浮点结果的最大整数值。 Zero is not less than or equal to -0.1.
答案 3 :(得分:0)
一种有用的方法可以理解为什么分区//产生负值的结果,这就是对模数或余数,%运算符的补充。
5/3 is equivalent to 1 remainder 2
即
5//3 = 1
5%3 = 2
但是
-5/3 = -2
-5%3 = 1
或者
-2 + 1/3rd which is -1.6667 (ish)
它看起来很奇怪,但它确保了诸如此类的结果
生成序列时-2,-2,-2,-1,-1,-1,0,0,0,1,1,1,2,2,2,3,3,3
等。