先日、某サイトの仕事をしていて、小数点以下1位で四捨五入していくと、まれに1円誤差が出るというバグ(?)の問題がありました。
そのときの話。
1÷3×3=1
それは
1×3÷3=1
でもあるわけですが、手元の安い計算機だと
1÷3×3は、0.99999・・・
となってしまいます。
また、iPhoneだと、きちんと1になりますが、
Androidは機種によって1だったり0.999・・・だったり。
下記のGoogle検索窓にで計算式をいれて検索しると、正しく「1」と表示されます。
プログラマさんに聞くと、コンピュータの世界は0か1かの2進法なので10進法を扱わせるとビット数(=桁数)が足らなくなるから、とのこと。
結局某サイトの場合は、(プログラマさん任せでしたが、確か)値×1000とかにして決めた桁で四捨五入したうえで、1000で割るような対処の仕方としました。
翌週、今度はまた別の案件で、評価を星3.5とか、星4という感じで0.5刻みで平均評価を表示させる件がありました。
数字に弱い私は、値が中途半端に「2.74・・・」は「2.5」に、「2.75・・・」は「3」にするにはどうするのかと思いましたが、やっぱり皆さんアタマいいんですね。
最初に2倍して四捨五入してから2で割って元にもどすんですってね。
例えば、
2.74は2倍で5.48、小数点以下1位を四捨五入で5.48は「5」に。
それを2で割ると「2.5」。
2.75は2倍で5.5、小数点以下1位を四捨五入で5.5は「6」に。
それを2で割ると「3」。
小学校の分数の掛け算、割り算あたりから落ちこぼれた私にとっては、そんなことに感動してしまった話でした。