[php]ceilによる切上げ処理が微妙な感じになる

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」関数でもいいですが、レンタルサーバーでは入っていない所が多いような気がします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)