【问题标题】:Integer division: is a//b == int(a/b) true for all integers a,b?整数除法:对于所有整数 a,b,a//b == int(a/b) 是否为真?
【发布时间】:2012-10-11 15:58:22
【问题描述】:

我知道如果数字都是正数,整数除法将始终返回与截断浮点结果相同的答案。如果其中一个或两个都是负数,是真的吗?

我只是想知道是否有一个整数除法表达式会在 Python 2 和 Python 3 中返回相同的结果(是的,我知道 from __future__ import division)。

附:让我们暂时忽略浮点溢出。

【问题讨论】:

  • " 在 Python 2 和 Python 3 中返回相同结果的整数除法表达式"再来一次?
  • @NullUserException,在 Python 3 中,如果您使用 / 将两个整数相除,您将得到浮点结果。这是与 Python 2 相比的巨大变化。// 现在是获取旧行为所必需的。
  • 我仍然不明白为什么他们会自动向上转换为浮动 .... 对我来说似乎很愚蠢... 我的意思是 int/int = int 是 CS 的核心宗旨...
  • @JoranBeasley:您真的认为在鸭子类型的语言中,您不应该仅仅因为 C 是静态类型而将数字视为数字并假设 / 进行实际除法吗?整数除法几乎不是“CS 的核心原则”。

标签: python python-3.x integer-division


【解决方案1】:

在 Python 3 中不是这样,你可以自己测试一下:

>>> int(-1/3) == -1//3
False

ab 的整数除法和模数分别给出q(商)和r(余数)将始终返回满足b*q + r == a(a*b)>0 == q>0 的数字(即a*b 和@ 987654329@ 具有相同的符号)和abs(r) < abs(q)。如果q 是浮点数,则表达式int(q) 总是向0 舍入。

除非您使用from __future__ import division,否则对于 Python 2 将始终如此,但这是因为 a/b == a//b 如果ab 在 Python 2 中是整数。

【讨论】:

  • >>> int(-1/3) == -1//3 ->` True` 当我在 py26 中尝试时,我知道它们是真的 ...
  • @JoranBeasley - 这是因为在 Python 2.6 中 a/b == a//b 如果 ab 是整数。
  • @JoranBeasley 因为在 Python 2 中,带有两个整数操作数的 /// 的作用完全相同。我们在这里讨论的是 Python 3(兼容性),而在 Python 3 中它们有所不同。
  • 是的,我明白了,对不起:P
  • 在 26 的旁注中,我知道它们是相同的,即使我这样做 from __future__ import division ...
猜你喜欢
  • 2014-03-29
  • 1970-01-01
  • 2013-05-26
  • 2017-01-21
  • 2010-12-08
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多