PHP fmod() 函数

定义和用法

fmod() 函数返回除法的浮点余数,即 num1 除以 num2 的余数。余数的定义是 num1 - i * num2,其中 i 是使结果与 num1 同号且绝对值小于 num2 的整数商(向零取整)。

提示:对于整数取模,可以使用 % 运算符,但 % 只能用于整数。而 fmod() 可以处理浮点数。

语法

fmod(float $num1, float $num2): float
参数 描述
num1 必需。被除数(分子)。
num2 必需。除数(分母)。

返回值

返回 num1 除以 num2 的浮点余数。结果的符号与 num1 相同,绝对值小于 num2

PHP 版本

  • PHP 4+
  • PHP 5+
  • PHP 7+
  • PHP 8+

示例

示例 1:基本用法

<?php
echo fmod(5.7, 1.3) . "<br>";   // 0.5 (因为 5.7 - 4*1.3 = 5.7 - 5.2 = 0.5)
echo fmod(10, 3) . "<br>";      // 1
echo fmod(-10, 3) . "<br>";     // -1 (符号与被除数相同)
echo fmod(10, -3) . "<br>";     // 1 (符号与被除数相同)
?>

输出:

0.5
1
-1
1

示例 2:与 % 运算符的对比

<?php
// % 只能用于整数,且结果符号与被除数相同
echo 10 % 3 . "<br>";   // 1
echo -10 % 3 . "<br>";  // -1
echo 10 % -3 . "<br>";  // 1

// fmod 可以处理浮点数
echo fmod(10.5, 3.2) . "<br>"; // 0.9 (10.5 - 3*3.2 = 10.5 - 9.6 = 0.9)
?>

输出:

1
-1
1
0.9

示例 3:实际应用 - 将角度规范化到 0-360 度

<?php
function normalizeAngle($angle) {
    $angle = fmod($angle, 360);
    if ($angle < 0) {
        $angle += 360;
    }
    return $angle;
}

echo normalizeAngle(450) . "<br>";   // 90
echo normalizeAngle(-90) . "<br>";   // 270
echo normalizeAngle(720) . "<br>";   // 0
?>

输出:

90
270
0

相关函数

注意事项

重要:
  • 如果除数为 0,fmod() 会返回 NAN(不是数字)并产生一个警告(PHP 8.0+ 会抛出 DivisionByZeroError 异常)。
  • 由于浮点数的精度限制,结果可能存在微小的误差,但在大多数应用中可接受。
  • 结果的小数部分精度取决于操作数的精度。
  • 传入非数值类型参数会导致警告(PHP 7+)或 TypeError(PHP 8+)。