銀行丸め(Banker's Rounding)
端数がちょうど半分の場合に、最も近い偶数に丸めることで公平に処理する丸め方法。
銀行丸め(Banker's Rounding)とは?
銀行丸め(最近接偶数への丸め/Round Half Even)は、ちょうど中間のタイ(0.5など)を最も近い偶数に丸める手法です。
銀行丸め(Banker's Rounding)の仕組み
銀行丸めを正しく適用するには、以下のステップに従います:
丸めの位を決める
丸めを行いたい対象の桁の位置を選択します。
切り捨てられる部分を確認
丸めの位の直後にある、切り捨てられる端数部分を確認します。
中間との距離を判定
端数が中間未満か、ちょうど中間か、中間を超えているかを判定します。
中間未満の場合
中間未満の場合は、最も近い小さい方の値へと切り捨てます。
中間を超える場合
中間を超える場合は、最も近い大きい方の値へと切り上げます。
ちょうど中間の場合
ちょうど中間の場合は、残される最後の桁(丸めの位の数字)を確認します。
残る桁が偶数の場合
残される桁が偶数であれば、そのまま維持します。
残る桁が奇数の場合
残される桁が奇数であれば、1 増やして偶数にします。偶数ルールが適用されるのは厳密に中間のケースのみです。
銀行丸めの基本ルール
銀行丸めのルールでは、タイ(中間の同点)が発生した際に候補となる数値の偶奇性(パリティ)を確認して丸め方向を決定します。最も近い値に丸める際、切り捨てられる端数が 5 未満であれば絶対値が小さい方の近い数値に丸められます。端数が 5 を超えていれば絶対値が大きい方の近い数値に丸められます。そして、切り捨てられる端数が厳密に 5 でありその後にゼロ以外の数字が続かない(ちょうど中間である)場合、最下位の桁が偶数になる方の結果が選択されます。
なぜ 2.5 は 2 に丸められるのか?
2.5 は 2 と 3 のちょうど中間に位置します。銀行丸めでは偶数の結果を選択しますが、2 は偶数で 3 は奇数です。したがって、2.5 は 2 に丸められます。
逆に、3.5 は 3 と 4 のちょうど中間に位置します。4 は偶数で 3 は奇数であるため、銀行丸めでは 4 が選択されます。したがって 3.5 → 4 となります。このように、中間のケースでは丸められる方向が交互に入れ替わります。
末尾が「5」の数値を丸めるとどうなるか?
末尾が 5 のすべての数値が厳密に中間のケースであるとは限りません。偶数ルールが適用されるのは、厳密に中間である値のみです。例えば、最も近い整数に丸める場合:
- 2.5 はちょうど中間です: ルールが適用され、2 に丸められます。
- 2.51 は中間を超えています: 3 の方に近いため 3 に丸められます。偶数ルールはスキップされます。
- 2.49 は中間未満です: 2 の方に近いため 2 に丸められます。偶数ルールはスキップされます。
銀行丸めの計算例
| 入力 | 結果 | 説明 |
|---|---|---|
| 2.5 | 2 | 2 は偶数 |
| 3.5 | 4 | 4 は偶数 |
| 4.5 | 4 | 4 は偶数 |
| 5.5 | 6 | 6 は偶数 |
| 6.5 | 6 | 6 は偶数 |
| 7.5 | 8 | 8 は偶数 |
| 8.5 | 8 | 8 は偶数 |
| 9.5 | 10 | 10 は偶数 |
このパターンにより、タイ(中間値)の半分は切り捨てられ(例: 2.5 → 2, 4.5 → 4)、もう半分は切り上げられる(例: 3.5 → 4, 5.5 → 6)ため、計算結果全体のバランスが保たれます。
小数桁への銀行丸め
特定の小数桁に丸める場合、残す桁のすぐ次の桁が 5 であり、その後のすべての桁がゼロであるときに「ちょうど中間」の状態になります。このとき、残される桁の数字によってタイの結果が決まります。
小数第1位への丸め
- 2.25 → 2.2
- 2.35 → 2.4
- 2.45 → 2.4
- 2.55 → 2.6
小数第2位への丸め
- 2.125 → 2.12
- 2.135 → 2.14
- 2.145 → 2.14
- 2.155 → 2.16
偶数ルールが適用されるのは、切り捨てられる端数が厳密に中間(.05 や .005 など)である場合のみであることを覚えておくことが重要です。もし値が 2.1251 であれば中間を超えているため、切り上げられて 2.13 になります。
負の数の銀行丸め
負の数に対してもまったく同じルールが適用されます。銀行丸めではタイが発生した場合、常に偶数の候補を選択します。偶奇性(パリティ)は符号によって変わりません。
−3.5 → −4
−4.5 → −4
−5.5 → −6
銀行丸め vs 四捨五入(Round Half Up)
四捨五入(Round Half Up)は中間のタイを常にゼロから離れる方向(正の数では切り上げ)に丸めるのに対し、銀行丸めは中間のタイを最も近い偶数に丸めます。
| 入力 | 銀行丸め(Banker's) | 四捨五入(Round Half Up) |
|---|---|---|
| 2.5 | 2 | 3 |
| 3.5 | 4 | 4 |
| 4.5 | 4 | 5 |
| 5.5 | 6 | 6 |
銀行丸め vs 五捨五入(Round Half Down)
五捨五入(Round Half Down / 半分切り捨て)は中間のタイを常にゼロに向かう方向に丸めるのに対し、銀行丸めは偶数ルールに従います。
| 入力 | 銀行丸め(Banker's) | 五捨五入(Round Half Down) |
|---|---|---|
| 2.5 | 2 | 2 |
| 3.5 | 4 | 3 |
| 4.5 | 4 | 4 |
| 5.5 | 6 | 5 |
銀行丸め vs 従来の丸め(Traditional Rounding)
初等数学などの教育現場で一般的に親しまれている丸めルールは四捨五入(Round Half Up)であり、中間の端数は常に切り上げられます。銀行丸めはこれとは異なるタイ解決ルールを採用しています。
銀行丸め vs 偶数への丸め(Round to Even)
銀行丸め(Banker's Rounding)と最近接偶数への丸め(Round Half Even)はまったく同一の丸め手法です。同じ論理的処理に対する異なる名称にすぎません。
なぜ銀行丸めが使われるのか?
多数の計算を繰り返し行う中で厳密に中間の端数が多く含まれる場合、四捨五入のように常に一方向のみへ丸めると体系的な偏り(累積バイアス)が生じる可能性があります。最近接偶数への丸め(Round Half Even)は偶奇性に基づいてタイの一部を切り上げ、一部を切り捨てます。これにより、大量のデータセットにおける丸め誤差の偏りを大幅に低減できます。
銀行丸めと丸めバイアス
複数の中間端数を含むデータセットの合計を求める例を考えてみましょう。厳密な数学的合計と、四捨五入(Half Up)および銀行丸め(Half Even)の結果を比較すると、バイアス軽減の効果が明確にわかります:
| 元の数値 | 四捨五入 (Half Up) | 銀行丸め (Half Even) |
|---|---|---|
| 1.5 | 2 | 2 |
| 2.5 | 3 | 2 |
| 3.5 | 4 | 4 |
| 4.5 | 5 | 4 |
| 合計: 12.0 | 合計: 14 | 合計: 12 |
厳密な合計は 12.0 です。四捨五入(Half Up)ではすべてのタイが切り上げられたため、+2 のバイアスが生じています。一方、銀行丸め(Half Even)では切り上げと切り捨ての調整が互いに相殺し合うため、この特定の例では正味の丸め誤差が生じません(※すべてのデータセットで合計が常に完全に一致することを意味するわけではありません)。
銀行丸めはどこで使われているか?
銀行丸めは、一部の金融、会計、統計、科学計算、およびソフトウェアシステムで採用されています(IEEE 754 規格や JIS Z 8401 規則A など)。実際にどの丸めルールが使用されるかは、適用される業界標準、ソフトウェア、または組織の規定によって異なります。
プログラミングにおける銀行丸め
言語やライブラリによって、実装されている丸めルールは異なります。round() という名前の関数が特定の丸め方式をデフォルトで使用していると決めつけず、必ず公式ドキュメントを確認するか、明示的に希望の丸めモードを指定してください。
Python は銀行丸めを使用しているか?
はい。Python の組み込み round() 関数は、タイのケースでデフォルトとして銀行丸め(Round Half Even)を採用しています。例えば、round(2.5) は 2 と評価され、round(3.5) は 4 と評価されます。なお、2進浮動小数点数の表現上の都合により、一部の10進小数が内部で厳密な中間値として保持されず、タイ解決ルールが意図通りに発動しない場合があることに注意してください。
C# / .NET
C# および .NET では、`Math.Round()` のデフォルト動作は銀行丸め(MidpointRounding.ToEven)です。中間の値をゼロから離れる方向に丸めたい場合は、明示的に `MidpointRounding.AwayFromZero` を渡すことで動作を変更できます。
Java
Java の `Math.round()` は四捨五入(Round Half Up)を使用します。銀行丸めを使用したい場合は、`BigDecimal` クラスを使用して明示的に `RoundingMode.HALF_EVEN` を指定する必要があります。
JavaScript
JavaScript の `Math.round()` は四捨五入(厳密には正の無限大方向への丸め)を使用します。JavaScript には組み込みの銀行丸め関数が存在しないため、独自に関数を実装する必要があります。
Excel は銀行丸めを使用しているか?
いいえ。Excel の標準 ROUND 関数は四捨五入(Round Half Up)を使用します。Excel で銀行丸めを実行するには、VBA でカスタム関数を作成するか、偶奇性を判定する複雑な数式を組む必要があります。
銀行丸めでよくある間違いと誤解
「5 は常に切り上げる」という誤解
これは四捨五入(Round Half Up)の説明であり、銀行丸めではありません。銀行丸めは偶奇性に基づいて、中間値の半分を切り上げ、半分を切り捨てます。
「5 は常に切り捨てる」という誤解
これは五捨五入(Round Half Down / 半分切り捨て)の説明です。銀行丸めは厳密な中間値に対して方向を交互に入れ替えます。
「銀行丸めはゼロ方向への丸めである」という誤解
ゼロに向かう丸めは切り捨て(切り下げ/Truncation)です。銀行丸めはまず最も近い数値を目標とし、中間のタイが発生した場合のみ偶数ルールを適用します。
「銀行丸めと Half Down は同じである」という誤解
Half Down はタイを常にゼロに向かって丸めます。一方、銀行丸めは偶数へ向かって丸めるため、3.5 → 4 のようにゼロから離れる方向になることもあります。
「銀行丸めはすべての丸めバイアスを完全に排除する」という誤解
大規模なデータセットにおける体系的な偏りを大幅に低減できますが、あらゆる任意のサンプルデータにおいてすべてのバイアスが魔法のように消えるわけではありません。
「すべてのプログラミング言語が銀行丸めを採用している」という誤解
JavaScript、PHP、Java の標準 `Math.round()` などは四捨五入系の方式を採用しています。開発環境ごとに実際の動作を確認することが不可欠です。
「すべての銀行が銀行丸めを使用している」という誤解
歴史的な法規制やシステムの制約から、実際には四捨五入を採用している金融機関も多数存在します。実際の運用は各組織やシステム基準に依存します。
「5 を含む数値はすべて中間のケースである」という誤解
数値がちょうど中間となるのは、切り捨てられる最初の桁が 5 であり、その後にゼロ以外の数字が続かない場合のみです(例: 2.500 は中間ですが、2.501 は中間ではありません)。
銀行丸め クイックリファレンス
| 状況 | ルール |
|---|---|
| 中間未満 | 最も近い値へ丸める(切り捨て) |
| 中間を超える | 最も近い値へ丸める(切り上げ) |
| ちょうど中間 + 残る桁が偶数 | そのまま維持(切り捨て) |
| ちょうど中間 + 残る桁が奇数 | 次の偶数に増やす(切り上げ) |
2.5 → 2 (ちょうど中間、2 は偶数)
3.5 → 4 (ちょうど中間、3 は奇数のため 4 に増加)
銀行丸めの計算ロジック
概念として、銀行丸めのルールは次のとおりです:元の数値から丸め候補となる最も近い2つの値までの距離を比較します。一方の距離が短ければ、その近い値を選択します。距離がまったく同じである場合(ちょうど中間のケース)、2つの丸め候補を比較し、残される最下位の桁が偶数(2で割り切れる数)である方を選択します。
銀行丸めの練習問題
以下の練習問題で理解度をテストしてみましょう。
1. 2.5 を最も近い整数に丸めなさい
答えを表示
解答: 2。ちょうど中間です。偶数の候補は 2 です。
2. 3.5 を最も近い整数に丸めなさい
答えを表示
解答: 4。ちょうど中間です。偶数の候補は 4 です。
3. −4.5 を最も近い整数に丸めなさい
答えを表示
解答: −4。候補は −4 と −5 です。−4 の桁が偶数です。
4. 6.51 を最も近い整数に丸めなさい
答えを表示
解答: 7。中間を超えています(7 の方が近い)。偶数ルールは適用されません。
5. 2.35 を小数第1位に丸めなさい
答えを表示
解答: 2.4。ちょうど中間です。候補は 2.3 と 2.4 であり、4 が偶数の桁です。
6. 2.45 を小数第1位に丸めなさい
答えを表示
解答: 2.4。ちょうど中間です。候補は 2.4 と 2.5 であり、4 が偶数の桁です。
7. 1,250 を最も近い百の位に丸めなさい
答えを表示
解答: 1,200。1,200 と 1,300 のちょうど中間です。百の位の 2 が偶数です。
8. 1,350 を最も近い百の位に丸めなさい
答えを表示
解答: 1,400。1,300 と 1,400 のちょうど中間です。百の位の 4 が偶数です。
9. 2.145 を小数第2位に丸めなさい
答えを表示
解答: 2.14。ちょうど中間です。候補は 2.14 と 2.15 であり、4 が偶数です。
10. 2.155 を小数第2位に丸めなさい
答えを表示
解答: 2.16。ちょうど中間です。候補は 2.15 と 2.16 であり、6 が偶数です。
よくある質問(FAQ)
銀行丸め(Banker's Rounding)とは何ですか?
銀行丸めは、2つの丸め候補のちょうど中間に位置するタイ(同点)を、最も近い偶数に丸めることで解決する手法です。
銀行丸めの別の呼び名は何ですか?
銀行丸めは「最近接偶数への丸め(Round Half Even)」とも呼ばれます。浮動小数点演算の標準規格である IEEE 754 では roundTiesToEven として規定されており、同じ偶数タイ解決の原則が用いられています。また日本では JIS Z 8401(数値の丸め方)の「規則A」としても知られています。
銀行丸めと Round Half Even は同じですか?
はい。銀行丸め(Banker's Rounding)と Round Half Even(最近接偶数への丸め)はまったく同一の丸め手法です。
なぜ 2.5 は 2 に丸められるのですか?
2.5 は 2 と 3 のちょうど中間にあります。銀行丸めでは偶数の結果を選択しますが、2 は偶数で 3 は奇数です。したがって、2.5 は 2 に丸められます。
なぜ 3.5 は 4 に丸められるのですか?
3.5 は 3 と 4 のちょうど中間にあります。銀行丸めでは偶数の結果を選択しますが、4 は偶数で 3 は奇数です。したがって、3.5 は 4 に丸められます。
銀行丸めでは「5」を切り上げますか、それとも切り捨てますか?
銀行丸めは、すべての「5」を単純に切り上げたり切り捨てたりするわけではありません。ちょうど中間の場合、残る桁が偶数になる方の結果を選択します。例えば、2.5 は 2 が偶数のため 2 に丸められ、3.5 は 4 が偶数のため 4 に丸められます。
銀行丸めでは負の数をどのように処理しますか?
負の数に対してもまったく同じ偶奇性ルールが適用されます。例えば、−2.5 は偶数の候補が −2 であるため −2 に丸められます。
銀行丸めは何のために使われますか?
大規模なデータセットにおいて体系的な丸めバイアス(誤差の偏り)を軽減するために、金融、統計、ソフトウェア工学などで使用されます。
なぜ銀行丸めはバイアスを減らすことができるのですか?
中間のタイの約半分を切り上げ、残りの約半分を切り捨てることで、常に一方向のみに丸める際に発生する累積的な誤差の偏りを防ぐことができるためです。
銀行丸めと四捨五入(Round Half Up)の違いは何ですか?
四捨五入(Round Half Up)は中間のタイを常にゼロから離れる方向に丸めます。銀行丸め(Banker's Rounding)は中間のタイを最も近い偶数に丸めます。
銀行丸めと五捨五入(Round Half Down)の違いは何ですか?
五捨五入(Round Half Down / 半分切り捨て)は中間のタイを常にゼロに向かう方向に丸めます。銀行丸め(Banker's Rounding)は中間のタイを最も近い偶数に丸めます。
Python は銀行丸めを使用していますか?
はい。Python の組み込み round() 関数は、デフォルトで銀行丸め(Round Half Even)を採用しています。
Excel は銀行丸めを使用していますか?
いいえ。Excel の標準 ROUND 関数は四捨五入(Round Half Up)を使用します。Excel で銀行丸めを行うには、カスタム数式を作成するか VBA 関数を記述する必要があります。