概要
知らなかったので忘れないうちにメモメモ。組み込み関数 round()
の丸め方が python3 から変更されていたのですね。
最近接偶数丸めに変更となっています。
python2 の環境が今無いので試していませんが、たしか前は普通の四捨五入だったような記憶がします。
なので、頭が四捨五入の状態で round(2.5)
の結果を予想すると 3
なのに
Python 3.7.2 (default, Feb 12 2019, 08:16:38) Type 'copyright', 'credits' or 'license' for more information IPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help. In [1]: round(2.5) Out[1]: 2
って出て焦ります(ました
丸める対象の値が、ど真ん中(tie)の場合に最近接偶数に丸めるという戦略なので、確かに 2
になりますね。
サンプル
""" 組み込み関数 round() のサンプルです. python3 から round の丸め方について変更されているので、そのサンプルです。 REFERENCERS:: http://bit.ly/2H4CBZT http://bit.ly/2H69SUB http://bit.ly/2H4CE81 http://bit.ly/2GZBz12 """ from trypython.common.commoncls import SampleBase from trypython.common.commonfunc import pr class Sample(SampleBase): def exec(self): # -------------------------------------------------------------------- # 組み込み関数 round() は、Python3 にて丸め方が変更となっている. # Python3 からは # 「最近接偶数への丸め」 # - round half to even # - round ties to even # に変わった。 # # これは、丸め対象の値が tie つまり、ど真ん中の場合に # 最も近い偶数の方に丸めるという方式。 # # なので、round(2.5) は、tie であるので、最近接偶数 が適用されて 2 となる。 # -------------------------------------------------------------------- pr('round(0.5)', round(0.5)) # 最近接偶数 は 0 pr('round(1.5)', round(1.5)) # 最近接偶数 は 2 pr('round(2.5)', round(2.5)) # 最近接偶数 は 2 pr('round(3.5)', round(3.5)) # 最近接偶数 は 4 pr('round(1.3)', round(1.3)) # ど真ん中 (tie) ではないので、通常の丸めで 1 pr('round(1.7)', round(1.7)) # ど真ん中 (tie) ではないので、通常の丸めで 2 def go(): obj = Sample() obj.exec() if __name__ == '__main__': go()
実行すると以下のようになります。
round(0.5)=0 round(1.5)=2 round(2.5)=2 round(3.5)=4 round(1.3)=1 round(1.7)=2
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場