読者です 読者をやめる 読者になる 読者になる

ITの隊長のブログ

ITの隊長のブログです。いや、まだ隊長と呼べるほどには至っていないけど、日々がんばります。CakePHPとPlayFrameworkを使って仕事しています。最近はAngular2をさわりはじめたお(^ω^ = ^ω^)

【PHP】round()を使って、N桁迄四捨五入する関数を作ってみた

PHP

スポンサードリンク

色々調べてみたけど、あんまり使いドコロがなさそうですな。まぁ頼まれたので実装してみたよ。

そもそも、四捨五入してくれるround()は桁数を指定して四捨五入をする関数です。

つまり

  • round(1450, -3)を実行すると1000(3桁目の4で四捨五入)

なのだが、今回お願いされたのは

  • custom_round(1450, -3)を実行すると2000(1桁で四捨五入すると1450、2桁で四捨五入すると1500、3桁で四捨五入すると2000となる)

これです。

マニュアルみてもround()でできなさそうだったので、カスタマイズしてみました。

github.com

<?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が正しい算出じゃないかなと思う。

算数の問題ではよくあったイメージなんだけど。。。俺の記憶が悪いだけかな。