PHP round() 函数

定义和用法

round() 函数对浮点数进行四舍五入,可以指定小数位数和舍入模式。

提示:如需向上取整,请使用 ceil();如需向下取整,请使用 floor()。从 PHP 5.3 开始,可以指定舍入模式(如四舍五入、向上取整、向下取整等)。

语法

round(float $num, int $precision = 0, int $mode = PHP_ROUND_HALF_UP): float
参数 描述
num 必需。规定要舍入的值。
precision 可选。规定小数位数(精度)。默认为 0,即舍入为整数。正数表示小数点后位数,负数表示对整数部分舍入(如 -1 舍入到十位)。
mode 可选。规定舍入模式。可用常量:
  • PHP_ROUND_HALF_UP(默认) - 遇到 .5 时向上舍入(四舍五入)
  • PHP_ROUND_HALF_DOWN - 遇到 .5 时向下舍入
  • PHP_ROUND_HALF_EVEN - 遇到 .5 时舍入到偶数
  • PHP_ROUND_HALF_ODD - 遇到 .5 时舍入到奇数

返回值

返回舍入后的浮点数。

PHP 版本

  • PHP 4+
  • PHP 5+(PHP 5.3 引入 mode 参数)
  • PHP 7+
  • PHP 8+

示例

示例 1:基本用法

<?php
echo round(3.4) . "<br>";   // 3
echo round(3.5) . "<br>";   // 4
echo round(3.6) . "<br>";   // 4
echo round(3.6, 0) . "<br>"; // 4
?>

输出:

3
4
4
4

示例 2:指定精度

<?php
echo round(1.95583, 2) . "<br>";  // 1.96
echo round(1241757, -3) . "<br>"; // 1242000 (舍入到千位)
echo round(5.045, 2) . "<br>";    // 5.05 (注意浮点精度可能导致 5.04)
?>

输出:

1.96
1242000
5.05

示例 3:使用不同的舍入模式

<?php
echo "默认 (HALF_UP): " . round(1.5, 0, PHP_ROUND_HALF_UP) . "<br>";   // 2
echo "HALF_DOWN: " . round(1.5, 0, PHP_ROUND_HALF_DOWN) . "<br>";     // 1
echo "HALF_EVEN: " . round(1.5, 0, PHP_ROUND_HALF_EVEN) . "<br>";     // 2
echo "HALF_ODD: " . round(1.5, 0, PHP_ROUND_HALF_ODD) . "<br>";       // 1

echo "HALF_EVEN 对 2.5: " . round(2.5, 0, PHP_ROUND_HALF_EVEN) . "<br>"; // 2
?>

输出:

默认 (HALF_UP): 2
HALF_DOWN: 1
HALF_EVEN: 2
HALF_ODD: 1
HALF_EVEN 对 2.5: 2

示例 4:实际应用 - 金额格式化

<?php
function formatPrice($price) {
    return '¥' . number_format(round($price, 2), 2);
}

echo formatPrice(19.995);  // ¥20.00
?>

输出:

¥20.00

相关函数

注意事项

重要:
  • 由于浮点数的内部表示方式,对某些数字(如 5.045)进行舍入时,可能会因为浮点精度问题而得到与预期不同的结果(例如 5.04 而不是 5.05)。这是浮点数运算的常见问题。
  • precision 为负数时,函数会对整数部分进行舍入,例如 round(1234, -2) 结果为 1200。
  • 传入非数值类型参数会导致警告(PHP 7+)或 TypeError(PHP 8+)。
  • 使用 PHP_ROUND_HALF_EVENPHP_ROUND_HALF_ODD 可以避免统计中的累积误差。