Python 2和Python 3中的整数除法

90

如何在Python 2.7中除以两个数并得到带小数的结果?

我不明白为什么会有差异:

在Python 3中:

>>> 20/15
1.3333333333333333

在 Python 2 中:

>>> 20/15
1

这实际上不就是取模吗?


13
这是整数除法,哟!20 mod 15 == 5 - C.B.
1
尝试使用float(20)/float(15) - dumbledad
或者浮点数 20./15. - user2821
4个回答

135
在Python 2.7中,如果输入的是整数,则/运算符会执行整数除法。如果您想要浮点数除法(这是我始终偏爱的内容),只需使用此特殊的导入:

在Python 2.7中,如果输入的是整数,则/运算符会执行整数除法。

如果您想要浮点数除法(这是我始终偏爱的内容),只需使用此特殊的导入:

from __future__ import division

在这里查看:

>>> 7 / 2
3
>>> from __future__ import division
>>> 7 / 2
3.5
>>>

整数除法可以通过使用//来实现,取模可以通过使用%来实现:

>>> 7 % 2
1
>>> 7 // 2
3
>>>

正如user2357112所评论的那样,这个导入必须在任何其他常规导入之前完成。


5
值得注意的是,future 语句必须出现在模块中的任何其他代码之前,特别是在非 future 导入之前。同时,import __future__ 是行不通的。 - user2357112
不错。几乎总是建议使用__future__的方式。 - woozyking
1
@dumbledad,这样更易读、简洁且直观。 - bgusach
1
有趣 - 我并不认为这更直观。如果我知道 / 是整数除法,并且结果有小数部分,我会感到惊讶,而且 from __future__ import division 可能需要翻很多屏才能找到。 - dumbledad
2
嗯,这有点主观,但对我来说,作为来自其他编程语言的人,3/2的结果是1让我感到困惑。许多人可能会同意,因为在Python 3中,默认情况下使用浮点数除法。 - bgusach
显示剩余3条评论

61

在Python 3中,/代表浮点数除法。

在Python 2中,/代表整数除法(假设输入为int)。

在Python 2和Python 3中,//代表整数除法。

(要在Python 2中获得浮点数除法,需要运算符之一是一个浮点数,如20.float(20)


1
谢谢你的括号说明——这正是我想知道的。 - Ivan X

17
在Python 2.x中,确保至少有一个操作数为 float。有多种方法可以实现这一点,如以下示例:

在Python 2.x中,确保至少有一个操作数为 float。有多种方法可以实现这一点,如以下示例:

20. / 15
20 / float(15)

12

"/" 在 Python 2 中表示整数除法,因此结果将四舍五入为整数。如果你想返回小数,请将其中一个输入的类型更改为 float:

float(20)/15 #1.33333333


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接