使用一个对另一个有好处吗?在Python2中,它们似乎都返回相同的结果:
>>> 6/3
2
>>> 6//3
2
请参考整数除法的问题,因为引入了//运算符进行整数除法。
在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上找到详细的描述。
编辑:可以"修复"python 2.2以来的分割!(刚刚阅读链接的政治公众人物)
也包括python -Qnew。其他分区选项:-Qold(默认)、-Qwarn、-Qwarnall。
值得指出的是,5.0 / 2在所有版本中都返回2.5,5 / 2.0也返回2.5。只有当两个操作数都是int时,旧的行为才不同。
如果数字是负数呢?负整数的行为相同吗?
@Aaronfranke,我用负数尝试了//(楼层划分)。这是结果。我定义了变量a=-50&b=-5,当我使用print(a//b)时,得到正值输出(10)。当我将var a或b更改为正值时,则输出为负值。我使用的是python 2.7.12版本。
@斯里尼瓦苏,你的例子没有帮助。最好是5/2(产生2)和-5/2(产生-3)。
在python 2.7.15中,//行为与python 3相同
这有助于澄清python 2.x行中,/既不是楼层划分,也不是真正的划分。目前接受的答案不清楚。当两个参数都为int时,/是楼层划分,但当其中一个或两个参数都为float时,则是真正的划分。
上面讲的是更多的事实,比公认答案中的第二段更清楚。
//实现"楼层划分",无论您的类型如何。所以1.0/2.0给0.5,但1/2、1//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()。
/->浮点除法
//->楼层划分
让我们在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中的输出相同,可以执行以下操作:
Python2.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中的楼层划分没有区别
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)相同吗?
如果数字是负数呢?负整数的行为相同吗?
正如大家已经回答过的那样,//是楼层划分。
这一点之所以重要,是因为在2.2版本(包括python 3.x版本)的所有python版本中,//都是明确的楼层划分。
/的行为可以根据以下情况而改变:
是否导入激活的__future__(模块本地)
python命令行选项,可以是-Q old或-Q new。
>>> print 5.0 / 2
2.5
>>> print 5.0 // 2
2.0
号
还没有意识到楼层划分也适用于非整数。谢谢!
python 2.7和其他即将发布的python版本:
分部(/)
将左手操作数除以右手操作数
示例:4 / 2 = 2。
楼层划分(//)
运算数的除法,其结果是除掉小数点后位数的商。但是,如果其中一个操作数是负数,则结果是向下的,即从零取整(向负无穷大取整):
示例:9//2 = 4和9.0//2.0 = 4.0、-11//3 = -4和-11.0//3 = -4.0。
/部门和//楼层部门的运营商都以类似的方式运营。
朝向无穷远和远离零是不同的东西。例如(-1.2和3.4):"地板"朝向负无穷(-2和3),"截断"朝向零(-1和3),"饱和"朝向零(-2和4),"天花板"朝向正无穷(-1和4)。
双斜线//是楼层划分:
>>> 7//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
//是楼层划分,它总是给出结果的整数楼层。另一个是"常规"部门。
在这个答案中,我不仅要告诉你答案,而且要告诉你//的好处。
大多数使用python的人必须知道python中的floor division操作符(//)。对于不知道的人,此运算符在除法后返回下限值。例如:5/2=2.5,但5//2=2(2是2.5的下限值)
但是对于大于10^17的数字,除法运算符的行为通常不正常。
x = 10000000000000000000006
if x / 2 == x // 2:
print("Hello")
else:
print("World")
对于上面的代码,世界将被打印,而不是你好。这是因为1000000000000000006/2将返回5e+21,但100000000000000000000006//2将返回正确的答案5000000000000000000003。即使是int(100000000000000000006/2),也会返回500000000000000000000,这是不正确的。
因此,即使要分割大数字,也要使用//运算符。
例如:如果要查找第一个10000000000000000000000000000010002数字的和,公式为:n(n+1)/2,则普通除法运算符(/)会给出错误的答案,但//运算符会给出正确的答案。
以下是'/'和'/'之间的区别;我已经在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
这个答案是如何加上其他想法没有涵盖的内容的?或者这个答案怎么比其他答案更好?
下面是程序的输出。这解释不了什么。
以上答案都很好。我想再加一点。在某些值中,这两个值的商相同。在此之后,楼层划分操作员(//工作正常,而不是划分操作员(/工作)。
- > int(755349677599789174/2)
- > 377674838799894592 #wrong answer
- > 755349677599789174 //2
- > 377674838799894587 #correct answer
。
5.0//2导致2.0,而不是2,因为//运算符返回值的返回类型遵循python强制(类型转换)规则。
python将较低的数据类型(integer)转换为较高的数据类型(float),以避免数据丢失。