[PHP]小数点の切り上げ 切り捨て 四捨五入

よく忘れるやつシリーズ

切り上げceilphp.net
切り捨てfloorphp.net
四捨五入roundphp.net

サンプル

<?php
echo '切り上げ: ' . ceil(3.14) . PHP_EOL;
echo '切り捨て: ' . floor(3.14) . PHP_EOL;
echo '四捨五入の四捨: ' . round(3.14) . PHP_EOL;
echo '四捨五入の五入: ' . round(3.8) . PHP_EOL;

実行結果(※CLIで実行)

切り上げ: 4
切り捨て: 3
四捨五入の四捨: 3
四捨五入の五入: 4

roundの引数

roundには引数が3つあります。第1引数の$valは丸める値ですが、それ以外の2つについてもちょっと掘り下げてみます。
まずphp.netの記載を見てみると、

 round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] ) : float

とあります。
まず、第2引数の$precisionは丸める桁数を指定します。小数点以下何桁で四捨五入するかを指定できます。マイナスの値を指定すると、小数点以上何桁で四捨五入します。

<?php
echo '$precisionに2を指定: ' . round(3.1415, 2) . PHP_EOL;
echo '$prectionに-2を指定: ' . round(123456, -2) . PHP_EOL;

実行結果(※CLIで実行)

$precisionに2を指定: 3.14
$precisionに-2を指定: 123500

何桁目で丸めるかを指定できるということですね。

続いて第三引数の$modeです。php.netから一部を転載させて頂きますと、

定数説明
PHP_ROUND_HALF_UP端数が5(半分)の場合、 val をゼロから離れる方向に丸めます。
PHP_ROUND_HALF_DOWN端数が5(半分)の場合、 val をゼロに近づく方向に丸めます。
PHP_ROUND_HALF_EVEN端数が5(半分)の場合、 val をもっとも近い偶数に丸めます。
PHP_ROUND_HALF_ODD端数が5(半分)の場合、 val をもっとも近い奇数に丸めます。

見るよりも動かす方がわかりやすいはず!

<?php
echo 'PHP_ROUND_HALF_UP 1.5: ' . round(1.5, 0, PHP_ROUND_HALF_UP) . PHP_EOL;
echo 'PHP_ROUND_HALF_UP -1.5: ' . round(-1.5, 0, PHP_ROUND_HALF_UP) . PHP_EOL;
echo 'PHP_ROUND_HALF_DOWN 1.5: ' . round(1.5, 0, PHP_ROUND_HALF_DOWN) . PHP_EOL;
echo 'PHP_ROUND_HALF_DOWN -1.5: ' . round(-1.5, 0, PHP_ROUND_HALF_DOWN) . PHP_EOL;
echo 'PHP_ROUND_HALF_EVEN 0.5: ' . round(0.5, 0, PHP_ROUND_HALF_EVEN) . PHP_EOL;
echo 'PHP_ROUND_HALF_EVEN 1.5: ' . round(1.5, 0, PHP_ROUND_HALF_EVEN) . PHP_EOL;
echo 'PHP_ROUND_HALF_EVEN 2.5: ' . round(2.5, 0, PHP_ROUND_HALF_EVEN) . PHP_EOL;
echo 'PHP_ROUND_HALF_ODD 0.5: ' . round(0.5, 0, PHP_ROUND_HALF_ODD) . PHP_EOL;
echo 'PHP_ROUND_HALF_ODD 1.5: ' . round(1.5, 0, PHP_ROUND_HALF_ODD) . PHP_EOL;
echo 'PHP_ROUND_HALF_ODD 2.5: ' . round(2.5, 0, PHP_ROUND_HALF_ODD) . PHP_EOL;

実行結果(※CLIで実行)

PHP_ROUND_HALF_UP 1.5: 2
PHP_ROUND_HALF_UP -1.5: -2
PHP_ROUND_HALF_DOWN 1.5: 1
PHP_ROUND_HALF_DOWN -1.5: -1
PHP_ROUND_HALF_EVEN 0.5: 0
PHP_ROUND_HALF_EVEN 1.5: 2
PHP_ROUND_HALF_EVEN 2.5: 2
PHP_ROUND_HALF_ODD 0.5: 1
PHP_ROUND_HALF_ODD 1.5: 1
PHP_ROUND_HALF_ODD 2.5: 3

今までのPG人生で$modeを指定したことがないのですが、開発するものによってはあると便利なのでしょう。

以上、PHPで小数点の切り捨て・切り上げと、四捨五入でした。

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA