Python 3.0の新機能を読み直したところ、次のように記載されています。
round()関数の丸め戦略と戻り値のタイプが変更されました。正確な中間のケースは、ゼロから離れるのではなく、最も近い偶数の結果に丸められるようになりました。(たとえば、round(2.5)は3ではなく2を返すようになりました。)
およびラウンドのドキュメント:
round()をサポートする組み込み型の場合、値は10の最も近い倍数からnを引いた値に丸められます。2つの倍数が等しく近い場合、丸めは偶数の選択に向けて行われます
したがって、v2.7.3では:
In [85]: round(2.5)
Out[85]: 3.0
In [86]: round(3.5)
Out[86]: 4.0
思った通り。ただし、現在v3.2.3では:
In [32]: round(2.5)
Out[32]: 2
In [33]: round(3.5)
Out[33]: 4
これは直感に反しているようで、丸めについて私が理解していることとは反対です(そして人々をつまずかせることになります)。英語は私の母国語ではありませんが、これを読むまでは、丸めの意味を知っていると思いました:-/ v3が導入された時点で、これについて何らかの議論があったに違いありませんが、正当な理由を見つけることができませんでした。私の検索。
- なぜこれがこれに変更されたのかについて誰かが洞察を持っていますか?
- この種の(私には一貫性のない)丸めを行う他の主流のプログラミング言語(C、C ++、Java、Perlなど)はありますか?
ここで何が欠けていますか?
更新:@Li-aungYipのコメントre"Banker's rounding"は、検索する正しい検索用語/キーワードを与えてくれました。私はこのSOの質問を見つけました:なぜ.NETは銀行家の丸めをデフォルトとして使用するのですか?、だから私はそれを注意深く読んでいきます。