round

(PHP 4, PHP 5, PHP 7, PHP 8)

round对浮点数进行四舍五入

说明

round(int|float$num, int$precision = 0, int$mode = PHP_ROUND_HALF_UP): float

返回将 num 根据指定精度 precision(十进制小数点后数字的数目)进行四舍五入的结果。precision 也可以是负数或零(默认值)。

参数

num

要处理的值。

precision

可选的十进制小数点后数字的数目。

如果 precision 是正数,则 num 会四舍五入到小数点后 precision 位有效数字。

如果 precision 是负数,则 num 四舍五入到小数点前 precision 位有效数字。即 pow(10, -$precision) 最接近的倍数,例如,precision 为 -1,num 可以四舍五入到十位,precision 为 -2,num 可以四舍五入到百位,等等。

mode

使用以下常量指定四舍五入发生的模式。

常量说明
PHP_ROUND_HALF_UPnum 恰好处于中间时,将其向远离零的方向舍入,使 1.5 变为 2,-1.5 变为 -2。
PHP_ROUND_HALF_DOWNnum 恰好处于中间时,将其向靠近零的方向舍入,使 1.5 变为 1,-1.5 变为 -1。
PHP_ROUND_HALF_EVENnum 四舍五入到最接近的偶数值,1.5 和 2.5 都变为 2。
PHP_ROUND_HALF_ODDnum 四舍五入到最接近的奇数值,1.5 变为 1,2.5 变为 3。

返回值

值是四舍五入到指定 precision 精度的 float

更新日志

版本说明
8.0.0num 不再接受支持数字转换的内部对象。

示例

示例 #1 round() 示例

<?php
var_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 示例

<?php
echo '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 带 precisionmode 示例

<?php
echo '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)

参见

To Top