PHP

PHP 小数の四捨五入(round)・切り上げ(ceil)・切り捨て(floor)

小数の四捨五入(round)・切り上げ(ceil)・切り捨て(floor)の使い方です。

四捨五入(round)

「round」は小数を四捨五入します。

<?php
    echo round(3.4)."<br>\n"; // 4を切り捨てて3
    echo round(3.5)."<br>\n"; // 5を切り上げて4
?>

» 実行結果
 

第2引数で四捨五入を行う桁数を指定できます。
■例
第2引数が0の場合:小数点第0位までを表示します(小数点第1位を四捨五入)
第2引数が1の場合:小数点第1位までを表示します(小数点第2位を四捨五入)
第2引数が2の場合:小数点第2位までを表示します(小数点第3位を四捨五入)

<?php
    echo round(1.2345, 2)."<br>\n"; // 4を切り捨てて1.23
    echo round(1.2345, 3)."<br>\n"; // 5を切り上げて1.235
?>

» 実行結果
 

第三引数でモードを選択できます。マニュアルを読んでもまっったく意味が分かりませんでしたが、色々試した結果下記のようになりました。間違ってたらご指摘下さい。
■モードの種類

PHP_ROUND_HALF_UP
通常の四捨五入です。
PHP_ROUND_HALF_DOWN
五捨六入です。
PHP_ROUND_HALF_EVEN
四捨六入(5は切り捨てて偶数になるなら切り捨て、切り上げて偶数になるなら切り上げ)
PHP_ROUND_HALF_ODD
四捨六入(5は切り捨てて奇数になるなら切り捨て、切り上げて奇数になるなら切り上げ)
<?php
    //PHP_ROUND_HALF_UP
    //四捨五入
    echo round(0.04, 1, PHP_ROUND_HALF_UP)."<br>\n";        // 4を切り捨てて0
    echo round(0.14, 1, PHP_ROUND_HALF_UP)."<br>\n";        // 4を切り捨てて0.1
    echo round(0.05, 1, PHP_ROUND_HALF_UP)."<br>\n";        // 5を切り上げて0.1
    echo round(0.15, 1, PHP_ROUND_HALF_UP)."<br>\n";        // 5を切り上げて0.2
    echo round(0.06, 1, PHP_ROUND_HALF_UP)."<br>\n";        // 6を切り上げて0.1
    echo round(0.16, 1, PHP_ROUND_HALF_UP)."<br>\n<br>\n";  // 6を切り上げて0.2
    
    //PHP_ROUND_HALF_DOWN
    //五捨六入
    echo round(0.04, 1, PHP_ROUND_HALF_DOWN)."<br>\n";        // 4を切り捨てて0
    echo round(0.14, 1, PHP_ROUND_HALF_DOWN)."<br>\n";        // 4を切り捨てて0.1
    echo round(0.05, 1, PHP_ROUND_HALF_DOWN)."<br>\n";        // 5を切り捨てて0
    echo round(0.15, 1, PHP_ROUND_HALF_DOWN)."<br>\n";        // 5を切り捨てて0.1
    echo round(0.06, 1, PHP_ROUND_HALF_DOWN)."<br>\n";        // 6を切り上げて0.1
    echo round(0.16, 1, PHP_ROUND_HALF_DOWN)."<br>\n<br>\n";  // 6を切り上げて0.2
    
    //PHP_ROUND_HALF_EVEN
    //四捨六入 (5は切り捨てて偶数になるなら切り捨て、切り上げて偶数になるなら切り上げ)
    echo round(0.04, 1, PHP_ROUND_HALF_EVEN)."<br>\n";        // 4を切り捨てて0
    echo round(0.14, 1, PHP_ROUND_HALF_EVEN)."<br>\n";        // 4を切り捨てて0.1
    echo round(0.05, 1, PHP_ROUND_HALF_EVEN)."<br>\n";        // 5を切り捨てると偶数の0になるので切り捨て
    echo round(0.15, 1, PHP_ROUND_HALF_EVEN)."<br>\n";        // 5を切り上げると偶数の2になるので切り上げ
    echo round(0.06, 1, PHP_ROUND_HALF_EVEN)."<br>\n";        // 6を切り上げて0.1
    echo round(0.16, 1, PHP_ROUND_HALF_EVEN)."<br>\n<br>\n";  // 6を切り上げて0.2
    
    //PHP_ROUND_HALF_ODD
    //四捨六入 (5は切り捨てて奇数になるなら切り捨て、切り上げて奇数になるなら切り上げ)
    echo round(0.04, 1, PHP_ROUND_HALF_ODD)."<br>\n";        // 4を切り捨てて0
    echo round(0.14, 1, PHP_ROUND_HALF_ODD)."<br>\n";        // 4を切り捨てて0.1
    echo round(0.05, 1, PHP_ROUND_HALF_ODD)."<br>\n";        // 5を切り上げると奇数の1になるので切り上げ
    echo round(0.15, 1, PHP_ROUND_HALF_ODD)."<br>\n";        // 5を切り捨てると奇数の1になるので切り捨て
    echo round(0.06, 1, PHP_ROUND_HALF_ODD)."<br>\n";        // 6を切り上げて0.1
    echo round(0.16, 1, PHP_ROUND_HALF_ODD)."<br>\n<br>\n";  // 6を切り上げて0.2
?>

» 実行結果
 

※モードを指定する時は必ず第2引数が必要です。第2引数を指定せずにモードを指定しても、指定したつもりのモードが数値として第2引数になり、第3引数は指定されず、意図しない結果を表示します。
・第2引数を指定ぜずにPHP_ROUND_HALF_UPを指定した場合
 → 第2引数に1が指定され、第3引数が指定されていない処理になる。
・第2引数を指定ぜずにPHP_ROUND_HALF_DOWNを指定した場合
 → 第2引数に2が指定され、第3引数が指定されていない処理になる。
・第2引数を指定ぜずにPHP_ROUND_HALF_EVENを指定した場合
 → 第2引数に3が指定され、第3引数が指定されていない処理になる。
・第2引数を指定ぜずにPHP_ROUND_HALF_ODDを指定した場合
 → 第2引数に4が指定され、第3引数が指定されていない処理になる。

切り上げ(ceil)

「ceil」は小数を切り上げます。

<?php
    echo ceil(3.1)."<br>\n"; // 1を切り上げて4
    echo ceil(3.9)."<br>\n"; // 9を切り上げて4
?>

» 実行結果
 

桁数を指定して切り上げたい場合は、一度その桁まで整数になる数値を掛けて切り上げを行った後に同じ数値で割るという方法があります。
下記は、1.2345の4を切り上げて1.24にする例です。

<?php
    echo ceil(1.2345 * 100) / 100; // 4を切り上げて1.24
?>

» 実行結果
 

切り上げ(floor)

「floor」は小数を切り捨てます。

<?php
    echo floor(3.1)."<br>\n"; // 1を切り捨てて3
    echo floor(3.9)."<br>\n"; // 9を切り捨てて3
?>

» 実行結果
 

桁数を指定して切り捨てたい場合は、一度その桁まで整数になる数値を掛けて切り捨てを行った後に同じ数値で割るという方法があります。
下記は、1.2345の5を切り捨てて1.234にする例です。

<?php
    echo ceil(1.2345 * 1000) / 1000; // 5を切り捨てて1.234
?>

» 実行結果
 

-PHP