用于除法时,“ /”和“ //”之间有什么区别?


Answers:


649

在Python 3.x中,5 / 2将返回2.5并且5 // 2将返回2。前者是浮点除法,后者是地板除法,有时也称为整数除法

在Python 2.2或更高版本的2.x行中,除非执行from __future__ import division,否则整数没有区别,这会使Python 2.x采取3.x行为。

不管将来的进口是什么,5.0 // 2都会归还,2.0因为这是操作的地板分割结果。

您可以在https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator中找到详细说明


编辑:自Python 2.2起,您可以“修复”划分!(只需阅读链接的PEP)
u0b34a0f6ae,2009年

2
python -Qnew。其他部门选项:-Qold(默认), -Qwarn-Qwarnall
约翰·拉ROOY

2
值得指出的是,所有版本都将5.0 / 2返回该值2.55 / 2.0旧的行为仅在两个操作数都为时才不同int
克里斯

2
如果数字为负数怎么办?负整数的行为是否相同?
亚伦·弗兰克

1
@Srinivasu您的示例没有帮助。最好是5 // 2(产生2)和-5 // 2(产生-3)。
Marvin

67

Python 2.x澄清:

为了阐明Python 2.x系列,/既不是楼层划分也不是真正的划分。当前接受的答案尚不清楚。

/是地板除法时 ARG游戏int,但真正当师之一或两者的参数的个数是float

上面讲了更多的事实,并且比接受的答案中的第二段更清楚。


33

//不论您使用哪种类型,都可以实施“楼层划分”。所以 1.0/2.0会给0.5,但两者1/21//2并且1.0//2.0会给0

有关详细信息,请参见https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator


这是一个很好的答案。PEP链接很有帮助。另外,考虑使用,math.floor()或者math.fmod()如果您不确定一元运算符是怎么回事。
Scott Lowrey

/并且//是二元运算符(两个操作数,左右,分子和分母)
iono

28

// -浮点除法

// ->楼层划分

让我们在python 2.7和python 3.5中查看一些示例。

Python 2.7.10和Python 3.5

print (2/3)  ----> 0                   Python 2.7
print (2/3)  ----> 0.6666666666666666  Python 3.5

Python 2.7.10和Python 3.5

  print (4/2)  ----> 2         Python 2.7
  print (4/2)  ----> 2.0       Python 3.5

现在,如果您希望在python 2.7中具有与python 3.5相同的输出,则可以执行以下操作:

Python 2.7.10

from __future__ import division
print (2/3)  ----> 0.6666666666666666   #Python 2.7
print (4/2)  ----> 2.0                  #Python 2.7

在python 2.7和python 3.5中,Floor划分之间没有区别

138.93//3 ---> 46.0        #Python 2.7
138.93//3 ---> 46.0        #Python 3.5
4//3      ---> 1           #Python 2.7
4//3      ---> 1           #Python 3.5

这和int(5/2)一样吗?
PirateApp

如果数字为负数怎么办?负整数的行为是否相同?
亚伦·弗兰克

1
回复:否定 -行为是相同的,但请记住,结果是地板,所以四舍五入总是向下朝着更负。一些例子:-100 // 33=> -4 ; 100 // -33=> -4 ; 但是由于地板函子的取整方向,与上一个相比,下一个似乎反直觉:-100 // -33=> 3
埃德斯·培根

22

正如大家已经回答的那样,//是楼层划分。

之所以如此重要,是因为//在所有2.2版本的Python版本中,包括Python 3.x版本,都明确地进行了地域划分。

的行为/可能会有所不同,具体取决于:

  • 是否有效__future__导入(模块本地)
  • Python命令行选项,-Q old或者-Q new


5

Python 2.7和其他即将发布的python版本:

  • 部门(/

将左操作数除以右操作数

例: 4 / 2 = 2

  • 楼层部门(//

操作数的除法,结果是除掉小数点后的数字的商。但是,如果其中一个操作数是负数,则结果是下限的,即从零开始舍入(朝负无穷大):

例如:9//2 = 49.0//2.0 = 4.0-11//3 = -4-11.0//3 = -4.0

这两个/师和//地板除法运算的操作以类似的方式。


2
趋向无穷大并远离零是不同的事情。(-1.2和3.4)的示例:“覆盖”朝向负无穷大(-2和3),“截断”朝向零(-1和3),“饱和”远离零(-2和4),而“天花板”朝向正无穷大(-1和4)。
菲尔诺斯特'17


3

//是底数除法,它将始终为您提供结果的整数底数。另一个是“常规”划分。


2

等式的答案四舍五入为下一个较小的整数,或者以.0作为小数点进行浮点运算。

>>>print 5//2
2
>>> print 5.0//2
2.0
>>>print 5//2.0
2.0
>>>print 5.0//2.0
2.0

2

上面的答案是好的。我想补充一点。最多两个值都导致相同的商。在该楼层之后,除法运算符(//)正常工作,但除法运算符()无效/

 - > int(755349677599789174/2)
 - > 377674838799894592      #wrong answer
 - > 755349677599789174 //2
 - > 377674838799894587      #correct answer

-1

5.0//2会导致2.0,而不是2因为运算符返回值的返回类型//遵循python强制(类型转换)规则。

Python促进将较低数据类型(整数)转换为较高数据类型(浮点数),以避免数据丢失。


-1
  • // 是底数划分,它将始终为您提供结果的底数。
  • 另一个/是浮点除法。

以下是之间的差///; 我已经在Python 3.7.2中运行了这些算术运算

>>> print (11 / 3)
3.6666666666666665

>>> print (11 // 3)
3

>>> print (11.3 / 3)
3.7666666666666667

>>> print (11.3 // 3)
3.0

2
这个答案如何添加其他想法无法涵盖的内容?还是该答案在任何方面都比其他答案更好?
罗里·道顿

2
以下是程序的输出。它什么也没解释。
罗恩侯爵,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.