[C#][VB.NET]丸め(四捨五入・銀行家の丸め)

丸め(四捨五入・銀行家の丸め)を行うには「Math.Round」を使用します。

「四捨五入」と「銀行家の丸め」の違い

「銀行家の丸め」は「四捨五入」と同じに見えますが、丸め対象の値が「5」の時、結果が偶数になります。 .NETの丸め処理は「Math.Round」メソッドで行いますが、デフォルトは「銀行家の丸め」なので注意してください。 次の表は「四捨五入」と「銀行家の丸め」の違いです。丸め対象が「5」の時、「銀行家の丸め」では結果が全て偶数になっています。
四捨五入 銀行家の丸め 四捨五入 銀行家の丸め 四捨五入 銀行家の丸め 四捨五入 銀行家の丸め
0.0 0 0 1.0 1 1 2.4 2 2 3.4 3 3
0.1 0 0 1.1 1 1 2.4 2 2 3.4 3 3
0.2 0 0 1.2 1 1 2.4 2 2 3.4 3 3
0.3 0 0 1.3 1 1 2.4 2 2 3.4 3 3
0.4 0 0 1.4 1 1 2.4 2 2 3.4 3 3
0.5 1 0 1.5 2 2 2.5 3 2 3.5 4 4
0.6 1 1 1.6 2 2 2.6 3 3 3.6 4 4
0.7 1 1 1.7 2 2 2.7 3 3 3.7 4 4
0.8 1 1 1.8 2 2 2.8 3 3 3.8 4 4
0.9 1 1 1.9 2 2 2.9 3 3 3.9 4 4

「四捨五入」と「銀行家の丸め」の方法

「四捨五入」をするには「Math.Round」メソッドのオプションで「MidpointRounding.AwayFromZero」を指定します。オプションを省略した場合と、「MidpointRounding.ToEven」を指定した場合は「銀行家の丸め」です。

「銀行家の丸め」の特徴

「四捨五入」では 1~4(4種類)が切り捨てられ、5~9(5種類)が切り上げになるため、合計したときに値が大きくなる傾向にあります。「銀行家の丸め」では「5」のときに偶数と奇数で振り分けられるため、誤差は小さくなります。しかし万能ではないため、厳密な金額計算などでは端数を按分する等の配慮が必要です。

「銀行家の丸め」の別名

記事内では「銀行家の丸め」としましたが、他にも「JIS丸め」「ISO丸め」「最近接偶数への丸め」「偶数丸め」「五捨五入」「偶捨奇入」とも呼ばれます。

サンプルコードのダウンロード

サンプルコードの実行には Microsoft Visual Studio 2015 以上のバージョンが必要です。 2015以外のバージョンではプロジェクトを開いた際にファイルの変換が必要な場合があります。その場合は変換後に実行してください。

検証環境

関連ページ