【发布时间】:2017-09-30 05:13:05
【问题描述】:
为什么python地板除法运算符的行为是这样的? 我遇到了这段代码 sn-p,结果非常令人惊讶。
a = 1 // 10
b = -1 // 10
print a,b
a= 0
b=-1
打印输出得到的结果是a=0和b= -1。
为什么a=0 和b= -1?
// 做地板除法,所以总是四舍五入?
【问题讨论】:
-
是的,“地板”的意思是“向下”。
-
在我的国家,地板是向下的,天花板是向上的;我们发现这比其他安排更方便。 ;)
-
这完全不符合标准数学:地板运算符向下舍入到下一个整数。所以 floor(3.9) 等于 floor(3.1) 等于 3,而 floor(-3.9) 等于 floor(-3.1) 等于 -4。您会在整个计算机语言和库中找到此定义。
-
更严肃的一点是,Python 的整数除法是取整除法非常方便。例如,这是一个查找 5 ≤ 给定数字的最大倍数的演示:
[(i, i//5*5) for i in range(-10, 11)]。如果//向零舍入而不是向负无穷大,则对于负数将无法正常工作。我们也可以使用//来进行ceiling分割。所以这个列表 comp 找到 5 ≥ 给定数字的最小倍数:[(i, i//-5*-5) for i in range(-10, 11)] -
在相关说明中,这种行为与
r = a % b中r的符号始终与b的符号相同的事实一致,因为如果q, r = a // b, a % b那么我们想要a == q * b + r是真的。
标签: python