読者です 読者をやめる 読者になる 読者になる

Pythonでの整数の除算

Python

Pythonで小数点以下の切り上げ処理で意図しない結果が返ってきて、ちょっと悩む。

>>> import math
>>> math.ceil(15/10) #2.0を期待
1.0

原因を調べてみると、Pythonリファレンスマニュアルに、次のようにある。

/ (除算: division) および // (切り捨て除算: floor division) は、引数間の商になります。数値引数はまず共通の型に変換されます。 整数または長整数の除算結果は、同じ型の整数になります; この場合、 結果は数学的な除算に関数 `floor' を適用したものになります。

つまり、現行のPythonでの整数同士の除算は、小数点以下が切り捨てられて結果も整数になる。上記の例だと、15/10の結果は1になるので、ceilの結果も当然意図しないものになる。
この仕様は将来のバージョンで変更され、例えば、15/10は浮動小数点数型で1.5を返すようになる。


新しい除算仕様を有効にすれば、意図した通りの結果が返ってくる。

>>> from __future__ import division
>>> import math
>>> math.ceil(15/10)
2.0