2.7.4上Python的/和//运算符

时间:2013-06-13 17:40:29

标签: python operators

我是Python的新手,我开始研究基础知识。我是一个C ++人,所以//运算符是新的。根据我正在阅读的一本书:

>> 4/2
2.0
>> 2/4
0.5
>> 5//4
2
>> 2//4
0

问题在于,当我写5//4时,结果为1,当我写4/2时,结果为2而不是2.0,当我写2/4时,结果为0。我必须写'2.0 / 4.0'才能得到0.5。这些作者的错误还是我做错了什么?

我在linux2上使用Python 2.7.4,[GCC 4.7.3]

4 个答案:

答案 0 :(得分:6)

在Python 2.x中,默认的除法运算符是“Classic dvision”。这意味着/与整数运算符一起使用时将导致类似于C的整数除法[即4/3 = 1]。

在Python 3.x中,这已经改变了。在那里,/指的是“真正的划分”[4/3 = 1.3333..],而//则用于请求“经典/地板划分”。

如果要在Python 2.7中启用“True division”,可以在代码中使用from __future__ import division

来源:PEP 238

例如:

>>> 4/3
1
>>> 4//3
1
>>> from __future__ import division
>>> 4/3
1.3333333333333333
>>> 4//3
1

答案 1 :(得分:2)

Python 3.x的情况会发生差异。 在Python 3.0中,7 / 2将返回 3.5 7 // 2将返回 3 。运营商/floating point division,运营商//floor divisioninteger division

但是在Python 2.x的情况下,没有任何差异,我认为文字是错的,这是我得到的输出。

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on 
win32 
Type "copyright", "credits" or "license()" for more information.
>>> 4/2
2
>>> 2/4
0
>>> 5//4
1
>>> 2//4
0
>>> 

答案 2 :(得分:0)

//似乎工作正常,

请在运营商上查看此tutorial

  

// = Floor Division - 结果为的操作数的划分   删除小数点后的数字的商。   9 // 2等于4,9.0 // 2.0等于4.0

4/2等于2.0,您需要指定一个浮点数。例如:4/float(2)评估为2.0。除法时,整数42尚未定义为floats

希望它有所帮助!

答案 3 :(得分:0)

在python 2.7及之前, 除非有浮动,否则总是整数除法。 /和//都是python 2.7和之前的整数除法。

>>>4/3
1
>>>4//3
1
>>>4/2.0
2.0
>>> 4//1.5
2.0

在python 3.2及更高版本中 /用于浮点除法,//用于整数除法

>>>4/2
2
>>>4/2.0
2.0
>>>3/2
1.5

所以在python 2.7中如果你想返回一个准确的浮点数,除数除法必须是浮点数,否则无论你用什么符号进行除法,你都会得到一个整数除法。 //如果你使用带有//的浮点数,你将得到一个结尾为.0的整数。

在python 3.2 ++中如果你想要一个整数除法你使用//,如果你想要浮动除法你使用/.

请参阅this了解python版本之间的差异。