【问题标题】:Why is this division not performed correctly?为什么这个划分没有正确执行?
【发布时间】:2010-10-03 18:24:46
【问题描述】:

我在 Python 中有一个奇怪的问题:除法没有正确执行:

print pointB[1]
print pointA[1]
print pointB[0]
print pointA[0]
print  (pointB[1]-pointA[1]) / (pointB[0]-pointA[0])

这些是结果:

100
50
100
40
0

谢谢

【问题讨论】:

标签: python python-2.x division


【解决方案1】:

上述行为适用于 Python 2。/ 的行为在 Python 3 中已修复。在 Python 2 中,您可以使用:

from __future__ import division

然后使用/ 得到你想要的结果。

>>> 5 / 2
2
>>> from __future__ import division
>>> 5 / 2
2.5

由于您将两个整数相除,因此您得到的结果是一个整数。

或者,将其中一个数字更改为float

>>> 5.0 / 2
2.5

【讨论】:

  • 我不确定它是否需要“固定” - 整数除法按预期工作。再加上 Python 3 已经发布了将近 2 年...
  • 我会引用 PEP238,This makes expressions expecting float or complex results error-prone when integers are not expected but possible as inputs. 我也怀疑他会使用 Python 3.0,因为我想每个人都明确表示现在坚持使用 2.6。但我也在学习,所以我可能错了。
  • 许多语言使用 Python 2 的整数除法(如果它们缺少动态类型,这不足为奇)。我想它被认为是一个设计缺陷,或者它不会被改变:) 顺便说一句,最新版本是 2.7 和 3.1(3.2 已经处于 alpha 阶段)。
  • 第一个代码示例中的小错字:from __future__ import divis*i*on
  • @ScottGriffiths 这在 15 年前就被认为是设计缺陷
【解决方案2】:

正确地完成了。

50/60 = 0

也许您正在寻找 50.0/60.0 = 0.83333333333333337,您可以将变量转换为浮点数来获得:

print  float(pointB[1]-pointA[1]) / (pointB[0]-pointA[0])

【讨论】:

    【解决方案3】:

    这就是python中整数除法的工作原理。在计算中使用浮点数或转换为浮点数:

    float(pointB[1]-pointA[1]) / (pointB[0]-pointA[0])
    

    【讨论】:

    • 强制转换为浮动并不是在所有情况下都能正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 2011-01-06
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多