Python 3/2和-3/2的区别是什么?

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中,/执行整数除法。这意味着,如果结果不是整数,则向下舍入到下一个整数值。当该值为负值时,自然会舍入到更大的负值 直观地说,整数除法的结果就是浮点除法的结果。由于这个原因,整数除法

我是编程和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中,
/
执行整数除法。这意味着,如果结果不是整数,则向下舍入到下一个整数值。当该值为负值时,自然会舍入到更大的负值

直观地说,整数除法的结果就是浮点除法的结果。由于这个原因,整数除法通常也被称为整数除法


在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