2018-03-23

システムの端数処理

プログラムを書く人は知ってると思うけど、少数以下を四捨五入する場合は、0.5を足して、少数以下を切り捨てるという処理をすればいい。

1.4 + 0.5 = 1.9 → 少数以下を切り捨てで 1

1.5 + 0.5 = 2.0 → 少数以下を切り捨てで 2

1.6 + 0.5 = 2.1 → 少数以下を切り捨てで 2

この前かかわった某システムデータごとに、四捨五入するか、切り捨てするか、切り上げするか、端数処理がバラバラになっている。

でもデータごとにフラグをもって、どの端数処理するか分岐するという処理にはなっていない。

フラグの代わりに

四捨五入するデータには、0.5

切り捨てするデータには、0.0

切り上げするデータには、0.9

という「端数処理係数」をもっていて、

値 + 端数処理係数 → 少数以下を切り捨て

という処理をしていた。

 

最初見たときには「分岐しないでいいかスマートなやりかたじゃん」と思ったけど、よく考えたら切り上げの時の端数処理係数は、0.9でなくて0.999999…だよな。

まあ、けっこう昔から動いてるシステム問題になってないってことは、これでいいんだろうけど。

お金計算はすごく厳密性が求められるとか言われてるけどけっこういい加減でいいんだって思った事案。

  • うわぁ。なんというか。。 そもそもそれどういう処理系で、金額は何の型に入れて計算してるの?

    • 独自の数値型作ってるのでは、と思って読んでた。フラグがどーとか

  • 絶対小数点以下一桁しかないってんならそれでいいけど、お金の話ならそんなわけないよなぁ

  • それ機密じゃないの\\\

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん