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

问题描述 投票:398回答:14

使用一个比另一个有好处吗?在Python 2中,它们似乎都返回相同的结果:

>>> 6/3
2
>>> 6//3
2
python math syntax operators
14个回答
560
投票

在Python 3.0中,5 / 2将返回2.5,而5 // 2将返回2。前者是浮点除法,后者是浮点除法,有时也称为整数除法。

在2.x行的Python 2.2或更高版本中,整数没有区别,除非你执行from __future__ import division,这会导致Python 2.x采用3.0的行为

无论将来进口如何,5.0 // 2将返回2.0,因为这是该操作的分区结果。

你可以在https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator找到详细的描述


2
投票

//是地板分区,它总是会给你结果的整数层。另一个是“常规”分工。


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

1
投票

以上答案都很好。我想补充一点。最多一些值都会产生相同的商。在那个楼层除法运算符(//)工作正常但不是除法(/)运算符之后。

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

0
投票
  • //是地板分区,它总是会给你结果的底价。
  • 而另一个/是浮点分区。

以下是///之间的区别;我在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

-1
投票

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

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


63
投票

它有助于澄清Python 2.x系列,/既不是分区也不是真正的分区。目前接受的答案尚不清楚。当两个args都是int时,/是一个分区,但当其中一个或两个args都是float时,它是真正的除法。

上面说明了更多的事实,并且比接受的答案中的第2段更清晰。


30
投票

无论您的类型如何,//都会实施“地板划分”。所以1.0/2.0将给0.5,但1/21//21.0//2.0都将给0

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


27
投票

/ - >浮点除法

// - >分区

让我们看一下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 division没有区别

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

20
投票

正如大家已经回答的那样,//是场上分裂。

为什么这很重要的是//在2.2版的所有Python版本中都是明确的分区,包括Python 3.x版本。

/的行为可能会改变:

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

10
投票
>>> print 5.0 / 2
2.5

>>> print 5.0 // 2
2.0

5
投票

Python 2.7和其他即将推出的python版本:

  • 师(/

用左手操作数除左手操作数

示例:4 / 2 = 2

  • 地板部(//

操作数的除法,其结果是删除小数点后的数字的商。但是如果其中一个操作数是负数,则结果会被消除,即从零(向负无穷大)舍入:

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

/ Division和// floor division运营商都以类似的方式运营。


3
投票

双斜线,//,是地板分区:

>>> 7//3
2

3
投票

在这个答案中,我不仅会说出答案,还会说出//的好处。

大多数使用Python的人必须了解Python中的分区运算符(//)。对于那些不知道的人,该算子在除法后返回最低值。例如:5/2 = 2.5,但5 // 2 = 2(2是2.5的底值)

但是除法运算符通常对于大于10 ^ 17的数字表现异常。

x = 10000000000000000000006
if x / 2 == x // 2:
    print("Hello")
else:
    print("World")

对于上面的代码,将打印World而不是Hello。这是因为10000000000000000000006/2将返回5e + 21,但10000000000000000000006 // 2将返回正确的答案5000000000000000000003。即使int(10000000000000000000006/2)也将返回5000000000000000000000,这是不正确的。

因此,即使您想要分割大数字,也可以使用//运算符。

例如:如果要查找前100000000000000000000000010002个数字的总和,其公式为:n(n + 1)/ 2,则正常除法运算符(/)将给出错误答案,但//运算符将给出正确答案。

© www.soinside.com 2019 - 2024. All rights reserved.