色々調べてみたけど、あんまり使いドコロがなさそうですな。まぁ頼まれたので実装してみたよ。
そもそも、四捨五入してくれる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
が正しい算出じゃないかなと思う。
算数の問題ではよくあったイメージなんだけど。。。俺の記憶が悪いだけかな。