※非常に有名な話だそうですが、今日まで知りませんでした・・・。
Python2とPython3
pythonには2系と3系があります。
2から3にバージョンアップする際に、いろいろと仕様が変わってしまったため、独立したバージョンとして扱われるようになったと記憶しています(たぶん)。
昔はサードパーティ製のライブラリが3に対応できていないから2を使うなんてことよくありましたが、最近はほぼ3に対応できているので、今から勉強する人は3で問題ないです。
で、この2と3ですが、結構違います。有名なところだと、整数同士の割り算の扱いや、print、range関数ですかね。
ネット上によくまとめられているサイトがありました。
qiita.com
(こんなに変更点あったんだ!)
pythonの四捨五入について
さて本題です。四捨五入。
ご存知4以下は切り捨て、5以上は切り上げるというヤツです。
この四捨五入、python2系ではroundという関数で実装されていました。
>>> round(2.4) 2.0 >>> round(2.5) 3.0 >>> round(3.4) 3.0 >>> round(3.5) 4.0
当然の結果です。なんの驚きもありません。
で、問題のpython3系でのround関数です。
>>> round(2.4) 2 >>> round(2.5) 2 >>> round(3.4) 3 >>> round(3.5) 4
衝撃の挙動。
最初に見た時は戸惑いました。
round(2.4)が2なのは当然として、round(2.5)が2で、それでいてround(3.5)は4なのです。
どうやら、丸め込み先の桁の数が偶数の場合は切り捨て、
奇数の場合は切り上げるようです。理由はそのほうが誤差が小さくなるからだそうです。
調べると山ほどはまった人の情報が出てきます(笑)どうして今まで知らなかったのだろう?
ちなみに今までどおりの普通の四捨五入の結果を得るには、自分で実装するしかないそうです。
qiita.com