切り上げ処理の穴

今Laravelで作っている代理店向けの価格と在庫確認サイトで、私は代理店向けの個別価格の計算結果(標準価格*掛け率)を四捨五入でやっているのですが、本日の打合せで営業から切り上げにしてほしいと言われました。PHPにもceil関数という切り上げ関数があって当初それを使ったんですが、ごく一部の価格で手計算だとぴったりの価格になるのが1円増えてしまうという現象が出ました。調べたら要するに浮動小数点演算で計算すると誤差が出て、例えば本当は2555が正しいのが、2555.000001とかになっていると、ceil関数はバカ真面目に切り上げて2556にしてしまう、というものでした。対策としては小数の掛け率を一定倍(10,000倍とか)して整数にしてから計算するというのでやりました。これってよく考えたらExcelのRoundup関数とかでも同じだよな、と気付いて調べたらやはりExcelでも出ていました。しかしそのMSのお勧め対応が超強引で笑いました。
=TEXT(ROUNDUP(D2,1),”0.0″)*1
要するに無理矢理表示されている値でテキストにキャストした後、1倍してまた数値に戻すという…(笑)