プログラマーノート

プログラマーの学習や雑記のメモです

【PHP】整数を四捨五入するのではなく丸める

はじめに

こんにちは。エンジニアの仕事をしている、たかふみです。

今回は PHP で整数を丸める処理をするのはどうしたらいいかまとめたいと思います。

PHPでround関数を使用し、整数を丸めようと思ったが?

例えば4670という数字があったとします。

これを4600に丸めるにはどうしたらいいでしょうか?

つまり、下二桁を丸めたいのです。

丸め対策にround関数を使ってみる

PHPには、round関数があります。

これは、第2引数にマイナスを設定すると 整数の何桁以上で四捨五入する処理です。

早速動かしてみましょう。

丸めることができるでしょうか?

<?php
        $number = 4670;
        $number = round($number,-2);
        var_dump($number);
        // float(4700) と出力

残念ながら、4600にはなりませんでした。

当然のことですが、 round関数は、四捨五入する処理なので

整数を丸める処理ではありません。

round関数では、整数の丸めを実行する処理にはならないのです。

PHPは、整数を丸める処理が無いようです。

どうやら丸め処理を自作しないといけないようです。

整数の丸め方

ではどうしたら、整数を丸めることができるのでしょうか?

桁数を無くす、という考えは、数学チックな考えが必要なのではないでしょうか?

そうなのです。

これを解決するには数学的なテクニックを使う必要があるのです。

整数で桁数を丸める計算式を考える

整数の桁数を丸めたいのですが、どうしたらいいか考えます。

数学的な思考を使って考えてみましょう。

たとえば、4670 ÷ 100 = 46.70 になります。

46.70の小数点を切り捨て、46になり

46に100を掛けると、

4600になります!

これを、PHPの関数にして処理してみましょう。

PHPで整数を丸める関数を自作する

<?php
        /**
         * 整数の丸めを実行する関数
         * 
         * @param int $num 丸めたい値
         * @param int $digit 丸めたい桁数
         *   2桁丸めたいなら100
         *   3桁丸めたいなら1000
         * @return float|int
         */
        function roundDown(int $num,int $digit) {
            // まるめたい数字より、桁数のほうが大きい場合0になってしまうことに注意
            if ( $digit < $num ) {
                return floor($num / $digit) * $digit;
            }
            return $num;
        }
        $number = 4670;
        $number = roundDown($number,100);
        var_dump($number);
        // float(4600) と出力

無事に整数を丸めることができました!

数学の問題を解いているようで、面白いですね。

注意点

丸めたい数字より、桁数のほうが大きい場合は、0になってしまいます。

したがって、桁数よりも丸めたい数字が大きいときにのみ、丸める処理を動作しています。

その点にご注意ください。

まとめ

いかがでしたでしょうか?

PHPの関数に、整数を丸める処理が無かったので丸め関数を自作しました。

整数を丸めたい機会がありましたら、ぜひご活用ください。

皆様の開発のお役に立てたら光栄です。読んで頂いてありがとうございました。