最近、1つのスクリプトを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))
Python 2.7は答えとして2を報告し、Python3.4は予想どおり3を報告します。
どうしてこれなの?
私は私が投げた場合、私は仕事に2.7を取得することができます知っているa
とb
通りfloat
:
c = math.ceil(float(a)/float(b)
ただし、ディビジョンのキャストも機能しません。
c = math.ceil(float(a/b))
3.4はこれをどのように回避しますか?
これを見つけると、2.7バージョンのスクリプトでどのくらいの計算を再チェックする必要があるのか疑問に思います。
これ/
は、Python2.7では除算演算子が整数除算であるためです。関数の引数は関数呼び出しの前に完全に評価されるため、ここでmath.ceil
は実際には無実の傍観者であったことに注意してください。
math.ceil(5/2) # same as math.ceil(2)!
2.7でPython3の動作を取得するには、futureステートメントを使用します。
from __future__ import division
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加