phpで切上げは「ceil」を使用しますが、掛け算、割り算等が混在する式で端数が0の時に、切上げが微妙です。(バグ?)
$a = ceil(1200*(8/100)); echo $a
8%の消費税を切り上げる処理ですが、普通に計算すると、96ですが、これを実行すると、97になります。
なぜ?
参考:PHPの少数演算における切り上げ切捨て問題 | PSI labs
PHPに限った話ではないですが、少数を内部的な二進数表現に変換すると、どうしても有効桁数と丸め方で誤差が出てしまうのです。
参考:phpでの誤差の対処で、(1)100をかける、(2)stringにする、で… – Yahoo!知恵袋
問題点は、「8/100」が0.08にならない事らしいです。
計算式を変えると、後で分からなくなるので、
$a = ceil((string)1200*(8/100)); echo $a
stringでキャストします。これで96にしてくれます。
「BC Math」関数でもいいですが、レンタルサーバーでは入っていない所が多いような気がします。
日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)