fmod() 函数返回除法的浮点余数,即 num1 除以 num2 的余数。余数的定义是 num1 - i * num2,其中 i 是使结果与 num1 同号且绝对值小于 num2 的整数商(向零取整)。
% 运算符,但 % 只能用于整数。而 fmod() 可以处理浮点数。
fmod(float $num1, float $num2): float
| 参数 | 描述 |
|---|---|
num1 |
必需。被除数(分子)。 |
num2 |
必需。除数(分母)。 |
返回 num1 除以 num2 的浮点余数。结果的符号与 num1 相同,绝对值小于 num2。
<?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
<?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
<?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
fmod() 会返回 NAN(不是数字)并产生一个警告(PHP 8.0+ 会抛出 DivisionByZeroError 异常)。