色々調べてみたけど、あんまり使いドコロがなさそうですな。まぁ頼まれたので実装してみたよ。
そもそも、四捨五入してくれるround()は桁数を指定して四捨五入をする関数です。
つまり
round(1450, -3)を実行すると1000(3桁目の4で四捨五入)
なのだが、今回お願いされたのは
custom_round(1450, -3)を実行すると2000(1桁で四捨五入すると1450、2桁で四捨五入すると1500、3桁で四捨五入すると2000となる)
これです。
マニュアルみてもround()でできなさそうだったので、カスタマイズしてみました。
<?php // 1桁からn桁まで四捨五入 function roundUntilNDigit($number, $digit) { for ($i = -1; $digit <= $i; $i--) { $number = round($number, $i); } return $number; } echo round(1450, -3).PHP_EOL; // 1000 echo roundUntilNDigit(1450, -3).PHP_EOL; // 2000
とまぁ、ループすれば簡単にできるよね。
ちなみに、そもそもこの動きは四捨五入ではないとのこと。45という数字を2桁で四捨五入してみる。先ほどカスタマイズした関数で解くと100になるが、45はどちらかというと、100よりは0に近い値です。普通にround()で解くと0になるので、やっぱり0が正しい算出じゃないかなと思う。
算数の問題ではよくあったイメージなんだけど。。。俺の記憶が悪いだけかな。