Php/docs/function.round

提供:Dev Guides
< Php
移動先:案内検索

round

(PHP 4, PHP 5, PHP 7)

round浮動小数点数を丸める


説明

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

val を、指定した precision(小数点以下の桁数)に丸めた値を 返します。precision を負またはゼロ(デフォルト) とすることも可能です。


パラメータ

val

丸める値。

precision

オプションで指定する、丸める桁数。

precision が正の値の場合、 val は 小数点以下、有効桁数 precision 桁に丸められます。

precision が負の場合、 val の 丸め処理は小数点より前の precision 桁に対して行われます。 つまり、一番近い pow(10, -precision) の倍数に丸められます。 たとえば、precision が -1 の場合、 val は 一番近い10の倍数に、 precision が -2 の場合は 一番近い100の倍数に丸められる、という具合です。

mode

次の定数のいずれかを使って、丸めのモードを指定します。

定数 説明
PHP_ROUND_HALF_UP 端数が5(半分)の場合、

val をゼロから離れる方向に丸めます。 1.5 は 2 に、そして -1.5 は -2 になります。

PHP_ROUND_HALF_DOWN 端数が5(半分)の場合、

val をゼロに近づく方向に丸めます。 1.5 は 1 に、そして -1.5 は -1 になります。

PHP_ROUND_HALF_EVEN 端数が5(半分)の場合、

val をもっとも近い偶数に丸めます。 1.5 や 2.5 は 2 になります。

PHP_ROUND_HALF_ODD 端数が5(半分)の場合、

val をもっとも近い奇数に丸めます。 1.5 は 1 に、そして 2.5 は 3 になります。


返り値

precision で与えられた精度に丸められた値を float で返します。


例1 round() の例

<?phpvar_dump(round(3.4));var_dump(round(3.5));var_dump(round(3.6));var_dump(round(3.6, 0));var_dump(round(5.045, 2));var_dump(round(5.055, 2));var_dump(round(345, -2));var_dump(round(345, -3));var_dump(round(678, -2));var_dump(round(678, -3));?>

上の例の出力は以下となります。


float(3)
float(4)
float(4)
float(4)
float(5.05)
float(5.06)
float(300)
float(0)
float(700)
float(1000)

例2 precision が、どうfloatの値に影響するか

<?php$number = 135.79;var_dump(round($number, 3));var_dump(round($number, 2));var_dump(round($number, 1));var_dump(round($number, 0));var_dump(round($number, -1));var_dump(round($number, -2));var_dump(round($number, -3));?>

上の例の出力は以下となります。


float(135.79)
float(135.79)
float(135.8)
float(136)
float(140)
float(100)
float(0)

例3 mode の例

<?phpecho 'Rounding modes with 9.5' . PHP_EOL;var_dump(round(9.5, 0, PHP_ROUND_HALF_UP));var_dump(round(9.5, 0, PHP_ROUND_HALF_DOWN));var_dump(round(9.5, 0, PHP_ROUND_HALF_EVEN));var_dump(round(9.5, 0, PHP_ROUND_HALF_ODD));echo PHP_EOL;echo 'Rounding modes with 8.5' . PHP_EOL;var_dump(round(8.5, 0, PHP_ROUND_HALF_UP));var_dump(round(8.5, 0, PHP_ROUND_HALF_DOWN));var_dump(round(8.5, 0, PHP_ROUND_HALF_EVEN));var_dump(round(8.5, 0, PHP_ROUND_HALF_ODD));?>

上の例の出力は以下となります。


Rounding modes with 9.5
float(10)
float(9)
float(10)
float(9)

Rounding modes with 8.5
float(9)
float(8)
float(8)
float(9)

例4 桁数を指定した mode の例

<?phpecho 'Using PHP_ROUND_HALF_UP with 1 decimal digit precision' . PHP_EOL;var_dump(round( 1.55, 1, PHP_ROUND_HALF_UP));var_dump(round(-1.55, 1, PHP_ROUND_HALF_UP));echo PHP_EOL;echo 'Using PHP_ROUND_HALF_DOWN with 1 decimal digit precision' . PHP_EOL;var_dump(round( 1.55, 1, PHP_ROUND_HALF_DOWN));var_dump(round(-1.55, 1, PHP_ROUND_HALF_DOWN));echo PHP_EOL;echo 'Using PHP_ROUND_HALF_EVEN with 1 decimal digit precision' . PHP_EOL;var_dump(round( 1.55, 1, PHP_ROUND_HALF_EVEN));var_dump(round(-1.55, 1, PHP_ROUND_HALF_EVEN));echo PHP_EOL;echo 'Using PHP_ROUND_HALF_ODD with 1 decimal digit precision' . PHP_EOL;var_dump(round( 1.55, 1, PHP_ROUND_HALF_ODD));var_dump(round(-1.55, 1, PHP_ROUND_HALF_ODD));?>

上の例の出力は以下となります。


Using PHP_ROUND_HALF_UP with 1 decimal digit precision
float(1.6)
float(-1.6)

Using PHP_ROUND_HALF_DOWN with 1 decimal digit precision
float(1.5)
float(-1.5)

Using PHP_ROUND_HALF_EVEN with 1 decimal digit precision
float(1.6)
float(-1.6)

Using PHP_ROUND_HALF_ODD with 1 decimal digit precision
float(1.5)
float(-1.5)

参考

  • ceil() - 端数の切り上げ
  • floor() - 端数の切り捨て
  • number_format() - 数字を千位毎にグループ化してフォーマットする