Python 2.x中的分区

时间:2017-05-29 06:09:14

标签: python python-2.7 integer-division

在Python 2.x中,整数除法-7 / 3应该输出-2,对吗?。理由:因为分子和分母都是整数,所以执行除法,并且十进制后的数字被截断。所以在这里案件, -7 / 3 = -2.3333333 ....所以,python应该输出-2.but它给出输出-3.can任何人请解释原因?

4 个答案:

答案 0 :(得分:4)

  

“和十进制后的数字被截断”

没有。那不是真的。 Python 2.x实现了整数的底层划分(//是python2.x和python3.x中的底层划分)。对于正数,这与截断小数点后的数字相同。但是对于负数,您会得到不同的结果(正如您所注意到的那样)。

请注意,这与使用C时的行为不同(例如)。 Guido在this blog post

中描述了这一决定背后的理性
  

整数除法运算(//)及其兄弟,模运算(%),一起来满足一个很好的数学关系(所有变量都是整数):

     

a / b = q,其余为r

     

这样

     

b * q + r = a且0 <= r&lt; B'/ P>      

(假设a和b> = 0)。

     

如果你希望关系延伸为负a(保持b为正),你有两个选择:如果你将q截断为零,r将变为负数,因此不变量变为0&lt; = abs(r) &LT;否则,你可以将q置于负无穷大,并且不变量保持为0&lt; = r&lt;湾

     

在数学数论中,数学家总是喜欢后者的选择......

答案 1 :(得分:1)

重要的是要认识到-7/3被解析为(-7)/3而非-(7/3),因此在其他答案中解释的楼层划分规则导致商评估为{{1} }。

答案 2 :(得分:0)

>>> 7/2
3
>>> -7/2
-4
>>> 7/3
2
>>> -7/3
-3
>>> 

你在分割后得到最低值,因此负数-3是底值,-2是ceil值,因为-3 <-2

答案 3 :(得分:0)

我猜Python 2.7会自动给出楼层值。 您可以import numpy然后执行np.ceil(-7/3)