Python 3における除算で思わぬ落とし穴

注意: この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。

RubyとPythonを学習する – 計算を行うの記事を書いている最中に、Python 3の計算において、C言語やJava、Rubyなどの一般的な他のプログラミング言語の計算ルールとは若干違う箇所があり、気をつけなければならないことがあったことに気づいたので、今回はそれについて書いてみたい。

一般的なプログラミング言語においては、整数同士の計算を行う場合、その結果は基本的に整数となる。これは、加算・減算・乗算はいうまでもなく、除算でも当てはまる。

したがって、例えば「5 ÷ 2」の計算を行った場合、一般的なイメージとしては「2.5」または「2 * 1/2」というイメージがつくものとがんがえられるが、これだと整数にはならないほか、小数点以下は切り捨てという形になるため、答えとしては「2」となる。これは、一般的なプログラミング言語では概ねそのルールになっている。

しかしながら、Python 3においては、気を利かせているのかどうかはわからないが、整数で割り切れない場合、小数点数に自動的に切り替えて計算を行うようになり、商は「2.5」となる。したがって、小数点以下は切り捨てという感覚でコーディングを行ってしまった場合、思わぬバグの原因になる。 ((Python 2においては、C言語やJava、Rubyなどと同様の挙動をするため、Python 3で仕様が変更されたということになる。))

もっとも、Python 3では、商を小数点以下切り捨ての整数にしたい場合、 // を使うという方法がある。これは、挙動的にはPython 2やC言語、Javaと同じく、整数以下の除算を行って、割り切れない数は切り捨てるという方法での計算になる。

今回取り上げた部分は、思わぬ落とし穴になる可能性があるので、ぜひとも気をつけたいところである。

タイトルとURLをコピーしました