Python 3/2和-3/2的区别是什么?
我是编程和Python的初学者。我正在做一些简单的数学运算。因此,正如我们所知,Python解释器中的Python 3/2和-3/2的区别是什么?,python,division,Python,Division,我是编程和Python的初学者。我正在做一些简单的数学运算。因此,正如我们所知,Python解释器中的3/2给出了1。但是-3/2给出了-2。你能指出这里的区别吗 -3/2 == -1.5 , floor(-1.5) = -2 同样地 3/2 == 1.5 , floor(1.5) = 1 在Python 2中,/执行整数除法。这意味着,如果结果不是整数,则向下舍入到下一个整数值。当该值为负值时,自然会舍入到更大的负值 直观地说,整数除法的结果就是浮点除法的结果。由于这个原因,整数除法
3/2
给出了1
。但是-3/2
给出了-2
。你能指出这里的区别吗
-3/2 == -1.5 , floor(-1.5) = -2
同样地
3/2 == 1.5 , floor(1.5) = 1
在Python 2中,
/
执行整数除法。这意味着,如果结果不是整数,则向下舍入到下一个整数值。当该值为负值时,自然会舍入到更大的负值
直观地说,整数除法的结果就是浮点除法的结果。由于这个原因,整数除法通常也被称为整数除法
在Python2中,可以通过将来自uuu future_uuuuimport division的
放在模块顶部来改变这种行为。此导入将使/
运算符仅指示真除法(浮点除法),并使用/
运算符启用显式楼层除法(整数除法)。这些约定是Python 3中的标准
from __future__ import division
print(3/2) # 1.5
print(3//2) # 1
正如@Dunes在评论中指出的,值得注意的是-
的优先级高于/
,因此-3/2
相当于(-3)/2
,而不是-(3/2)
。如果先应用除法,结果确实是-1
Python有两个除法运算符
/
/
这里,/
将始终将结果四舍五入到最接近的整数(与操作数类型无关)。这称为“楼层划分”。但是如果两个操作数都是整数,则/
将舍入到最接近的整数,如果其中任何一个操作数都是浮点,则它将实际除法
通过这个例子可以清楚地理解其中的区别
>>> 11/4
2
>>> 11.0/4
2.75
>>> 11//4
2
>>> 11.0//4.0
2.0
引用
向下舍入为最接近整数的数学除法。楼层划分操作员是/
。例如,表达式11//4
的计算结果为2
,与浮点真除法返回的2.7
5相反注意(-11)//4
是-3
,因为这是-2.75
向下舍入的。看
引用文本的最后一行将是您实际问题的答案。3/2
->1.5,四舍五入为1-3/2
->-1.5,四舍五入为-2。另请参阅以了解Python为何向负无穷大进位的解释。我认为四舍五入通常被称为-floor
+1,以更好地解释它。值得注意的是,-
在这里是一元运算符,绑定比除法运算符更紧密。如果是另一种情况,那么结果是一样的。在Python 3.4.2中,int(-1.5)
返回-1
@noctiskytower好吧!我已经从答案中删除了冒犯性的谎言@NoctisSkytower:从永远开始,Python 2中的结果都是一样的。int()。它与除法没有任何关系。地板除法和四舍五入到最接近的整数是两个不等价的概念。在Python3.4.2中,5//3
将产生1,而round(5/3)
将产生2。/
运算符将始终向负无穷大方向取整。
>>> 11/4
2
>>> 11.0/4
2.75
>>> 11//4
2
>>> 11.0//4.0
2.0