えっ、端数の丸め処理って「切り上げ」「切り捨て」「四捨五入」だけじゃないの?

121d3c318e49862e82dcdf3bf16e4529_s

業務系アプリの改修・開発をやっていると、常にぶち当たるのが「端数処理の丸め問題」。

この件で最近やらかしたので、まとめておこうと思います。

「最近接偶数への丸め」とは

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

やらかした経緯

その案件はKINTONEを使っての業務アプリの改修でした。

お客さんに、

「ここの処理の端数は四捨五入で処理してください」

と頼まれたんです。

とりあえず検証環境にて動作確認です。

計算式型フィールドで処理していた箇所について、丸め処理を変更したい場合には、

「設定」→「高度な設定」から設定変更出来るのですが、

設定できるのは以下の3項目でした。

端数処理について「切り上げ」「切り捨て」「四捨五入」しか知らない私は、

「多分『最近接偶数への丸め』は『四捨五入』のことを指しているんだろう」

と思い、『最近接偶数への丸め』に設定。

そのとき、不思議なことが起こった…

表示する桁数は小数第二位までとしていたのですが、

「0.075」は「0.08」と変換され、

「0.025」は「0.02」と変換されたのです。

これは、絶対におかしい…

何かが、あったに…違いない…

一体、何が…

「最近接偶数への丸め」とは(再掲)

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

余談

やらかした一件に関しては、お客様に状況を説明し、

切り上げ処理に変更頂きました。(数値的にx.xx5の運用しか無い想定)

というか、なぜKINTONEのデフォルト設定として四捨五入が存在しないのか……

丸め処理に関しては、

他にも色々と種類があるようです。

「五捨六入」はまだわかるよ。

なんだよ「四捨六入」って。なんだよ「フォン・ノイマン丸め」って。

詳細はwikipedia見てください。

私は本件ですっかり消耗してしまいました。

こうした知識はどういう時に身につくものなんでしょうね。

基本情報処理とかでやったのであれば、少しは覚えているハズなんですが……

タイトルとURLをコピーしました