【一覧】Java, C#, PHP, Ruby, Python, JavaScript での Math.round(四捨五入・五捨六入)比較 
2017/06/28 Wed [edit]
先日、言語間で算術関数を含む移植などしてたら、結果が違ってたので改めて調べてみた。「負の値の割り算や剰余」なんかもそうだけど、言語仕様によって値が違ってたりするので、毎回確認するのは面倒なんだよね。せっかくなので、一覧にしていつでも見れるようにしておこうと考えた。
(元の値) | Java | JavaScript | C# | Python3 | Ruby | PHP |
---|---|---|---|---|---|---|
Math.round | Math.round | Math.Round | round | round | round | |
-2.0 | -2 | -2 | -2 | -2 | -2 | -2 |
-1.6 | -2 | -2 | -2 | -2 | -2 | -2 |
-1.5 | -1 | -1 | -2 | -2 | -2 | -2 |
-1.4 | -1 | -1 | -1 | -1 | -1 | -1 |
-1.0 | -1 | -1 | -1 | -1 | -1 | -1 |
-0.6 | -1 | -1 | -1 | -1 | -1 | -1 |
-0.5 | 0 | 0 | 0 | 0 | -1 | -1 |
-0.4 | 0 | 0 | 0 | 0 | 0 | 0 |
0.0 | 0 | 0 | 0 | 0 | 0 | 0 |
0.4 | 0 | 0 | 0 | 0 | 0 | 0 |
0.5 | 1 | 1 | 0 | 0 | 1 | 1 |
0.6 | 1 | 1 | 1 | 1 | 1 | 1 |
1.0 | 1 | 1 | 1 | 1 | 1 | 1 |
1.4 | 1 | 1 | 1 | 1 | 1 | 1 |
1.5 | 2 | 2 | 2 | 2 | 2 | 2 |
1.6 | 2 | 2 | 2 | 2 | 2 | 2 |
2.0 | 2 | 2 | 2 | 2 | 2 | 2 |
実際の結果は以下の通り。paiza.io で比較した。
言語によっては丸め方法のオプションなんかもあるが、そのまま使ってると四捨五入っぽかったり、五捨六入っぽかったり、0からの距離っぽかったり、値の境界が異なるので、複数の言語を使うときには気をつけた方が良いだろう。
どうしても揃えたければ
floor(v + 0.5)
のようにする手もある。
また、「0からの距離でグループ分け」と「等間隔にグループ分け」で使い分けをすることもできるので、知っておいても損はないだろう。
まぁ、何にしても、「負の値の演算」「丸め誤差を持つ演算」「0をまたぐ演算」あたりは仕様を確認しておいた方が良いだろう。
(関連記事)
【C#】倍数での Floor, Ceil, Round(一定間隔での切り捨て、切り上げ、四捨五入) [double 版]
【Unity】倍数での Floor, Ceil, Round(一定間隔での切り捨て、切り上げ、四捨五入) [float 版]
【Java】Math.floor(), ceil(), round() 動作互換アルゴリズムを試す
- 関連記事
-
-
HTMLカラー名・カラーコード表
-
Android と Applet の互換ってできるもんだね
-
【一覧】Java, C#, PHP, Ruby, Python, JavaScript での Math.round(四捨五入・五捨六入)比較
-
トランジションルール画像の自動生成を移植
-
トラックバック
トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/245-e4c7873c
この記事にトラックバックする(FC2ブログユーザー)
| h o m e |