为什么 Python 2.7 报告的上限值不正确?

Cat*_*ami 2 python rounding python-2.7 python-3.x

我最近将一个脚本从 3.4 转换为使用 Python 2.7(应一位同事的要求),我发现 math.ceil 函数无法正常工作......

当我除以 5/2 并用 math.ceil() 取整时,我希望得到 math.ceil(5/2) = 3。

鉴于以下代码:

from __future__ import print_function
import math

a = 5
b = 2
c = math.ceil(a/b)

print("Ceiling output: {}".format(c))
Run Code Online (Sandbox Code Playgroud)

Python 2.7 将报告 2 作为答案,Python 3.4 按预期报告 3。

为什么是这样?

我知道如果我投射ab作为,我可以让 2.7 工作float

c = math.ceil(float(a)/float(b)
Run Code Online (Sandbox Code Playgroud)

但是,投射除法也不起作用:

c = math.ceil(float(a/b))
Run Code Online (Sandbox Code Playgroud)

3.4 如何解决这个问题?

发现这一点让我怀疑我需要在脚本的 2.7 版本中重新检查多少数学。

wim*_*wim 5

这是因为除法运算符/在 Python 2.7 中是整数除法。请注意,函数参数在函数调用之前已被完全评估,因此math.ceil这里实际上是一个无辜的旁观者。

math.ceil(5/2)  # same as math.ceil(2)!
Run Code Online (Sandbox Code Playgroud)

要获得 2.7 中的 Python 3 行为,请使用 future 语句:

from __future__ import division
Run Code Online (Sandbox Code Playgroud)