ROUND関数は四捨五入でなく偶数丸め(銀行丸め)になる場合があることを知らないと大変なことになるかもよ?

11 8 3

PC関連

201502_0296

皆さんはExcel(エクセル)の関数なんかはよく使われますかね?私は仕事がらExcelをよく使うので、関数もぼちぼち使うシーンがあります。

Excelで四捨五入する関数と言えばRound関数(ラウンド関数)ですよね。これはExcelをそれなりに使う人ならすぐ出てくると思います。

でもExcelで使えるROUND関数って、必ずしも四捨五入じゃないってこと、知ってますか?

例えば、2.5をROUND関数を使って整数にするとどうなるかわかりますか?答えは「3」・・・にならない場合があるんですよ、これが。

今回はそんなROUND関数のお話です。

credit: Marcin Wichary via FindCC

SPONSORED LINK

ROUND関数は2種類ある

最もよく知られたROUND関数の端数処理は「四捨五入」でしょう。っていうか、むしろこれ以外あるの?って感じの人が大半だと思います。

例えばExcelのセルに以下のような数式を入力してみます。

▼セルに「=ROUND(2.5, 0)」と入力してみる。「0」は四捨五入した結果、小数点第○位に丸めたいという指定になります。つまり整数になります。

201502_0297

結果は「3」になりましたね。予想通りだと思います。このようにワークシートの関数として使うROUND関数はまあいんですよ。

でもね、同じExcelでもVBA(Visual Basic for Application)、通称マクロで使用できるOUND関数を使ってみるとどうなるか見てみましょう。

▼こんな感じで簡単なマクロを組んでみます。

201502_0300

単純にRound(2.5, 0)の結果をメッセージボックスに表示するだけのコードです。

▼これを実行した結果がこれ。

201502_0299

結果が「2」になっているのがわかりますか?そうです、3にならないんです。

偶数に丸める偶数丸め(銀行丸め)

2.5が3にならない四捨五入って何なの!?って思うかもしれませんが、それはそもそも四捨五入ではなく「偶数丸め(銀行丸め)」と呼ばれる端数処理の種類の1つになります。

端数が0.5より小さいなら切り捨て、端数が0.5より大きいならは切り上げ、端数がちょうど0.5なら切り捨てと切り上げのうち結果が偶数となる方へ丸める。JIS Z 8401で規則Aとして定められていて、規則B(四捨五入)より「望ましい」とされている。

つまり、今回の「2.5」の場合、端数が0.5だったので、奇数の3ではなく偶数の2のほうに丸められて処理された、というわけです。

これ、、、知らないと絶対ハマると思いませんか?というか、私はハマりました。

Excelでちまちま手で関数入力するのが嫌になり、ちょっとVBAでマクロ化してやろーと思ってやったら結果に違いが出て、なんで!?!?ってなったわけです。

結構バラつきのあるROUND関数

同じExcelでもROUND関数が四捨五入と偶数丸めの2つがあることがわかりましたが、Excel以外のアプリケーションや言語も結構ばらついているんですね。

数値の丸めの挙動は処理系によって違う – なんじゃくにっき

上記サイトによると、

四捨五入

Java、Oracle、PostgreSQL、SQL Server、Excel

偶数丸め(銀行丸め)

C、Delphi、C#、VBA、MySQL

…ってな感じだそうです。

IT系のお仕事をしている人は意識して使い分けないと思わぬトラブルにつながっちゃうかもしれませんよ!?

まとめ

というわけで、知ってる人は知っているけど知らない人は絶対知らないだろうRound関数の端数処理に関するお話でした。

実は私もこれを知らずにトラブルになりかけたので、ぜひ知っておいてほしいと思い記事にしました。注意しましょうね。

SPONSORED LINK

PC関連

  • メールアドレスを記入して購読すれば、更新をメールで受信できます。現在、36 人が購読中です!
    ※メールアドレスは管理人には知られません

  • ラブグアバが更新されたらプッシュ通知でお知らせします。

  • おっさん管理人グアバが執筆しています。ミスチル好き。
    私が気になったこと(主にスマホ/Webサービス/生活/ミスチル/たまにトイレ)について書いています。2016年7月時点で月間36万PV。
    詳細はコチラ

    フォローはこちらから!