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。
为什么是这样?
我知道如果我投射a
和b
作为,我可以让 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 版本中重新检查多少数学。
这是因为除法运算符/
在 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)