【问题标题】:Division in Python 2.7. and 3.3 [duplicate]Python 2.7 中的除法。和 3.3 [重复]
【发布时间】:2014-02-14 12:29:05
【问题描述】:

如何在 Python 2.7 中将两个数字相除并得到小数的结果?

我不明白为什么会有区别:

在 Python 3 中:

>>> 20/15
1.3333333333333333

在 Python 2 中:

>>> 20/15
1

这不是模数吗?

【问题讨论】:

  • 这是整数除法,哟! 20 mod 15 == 5
  • 试试float(20)/float(15)
  • 或浮动 20./15.

标签: python python-2.7 python-3.3 division


【解决方案1】:

在 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 所评论的,此导入必须在任何其他正常导入之前完成。

【讨论】:

  • 值得注意的是,未来的语句必须出现在模块中的任何其他代码之前,尤其是在非未来的导入之前。另外,import __future__ 不起作用。
  • 不错。使用__future__ 几乎总是推荐的方式
  • @dumbledad,更易读、更简洁、更直观
  • 有趣 - 我觉得它不是更直观。如果我知道/ 是整数除法并且结果有小数,我会大吃一惊,而from __future__ import division 可能不止一屏。
  • 嗯,这在某种程度上是主观的,但对我来说,来自其他语言,3/2==1 的划分令人困惑。很多人可能会同意,因为浮点除法在python 3中是默认的
【解决方案2】:

在 Python 3 中,/ 是浮点除法

在 Python 2 中,/ 是整数除法(假设 int 输入)

在 2 3 中,// 都是整数除法

(要在 Python 2 中进行浮点除法,需要任一操作数为浮点数,如 20.float(20)

【讨论】:

  • 感谢您的补充——这是我很好奇的。
【解决方案3】:

"/" 是 python 2 中的整数除法,因此它将四舍五入为整数。如果您想返回小数,只需将其中一个输入的类型更改为浮点数:

float(20)/15 #1.33333333

【讨论】:

    【解决方案4】:

    在 Python 2.x 中,确保在 float 中至少有一个除法操作数。您可以通过多种方式实现此目的,例如以下示例:

    20. / 15
    20 / float(15)
    

    【讨论】:

      猜你喜欢
      • 2018-02-11
      • 1970-01-01
      • 2015-05-10
      • 2014-01-01
      • 2013-01-26
      • 2014-04-29
      • 2013-07-23
      • 1970-01-01
      • 2016-06-14
      相关资源
      最近更新 更多