fdiv
fdiv($num1, $num2)
Dzieli dwie liczby jako liczby dziesiętne (float). Przy dzieleniu przez zero nie rzuca wyjątku, tylko zwraca INF, -INF albo NAN. Funkcja istnieje od PHP 8.0.
Parametry
- $num1 – dzielna.
- $num2 – dzielnik, może być też zerem.
Przykłady
var_dump(fdiv(10, 4)); // float(2.5)
var_dump(fdiv(10, 5)); // float(2)
var_dump(fdiv(1, 0)); // float(INF)
var_dump(fdiv(-1, 0)); // float(-INF)
var_dump(fdiv(0, 0)); // float(NAN)
// operator / od PHP 8 rzuca przy dzieleniu przez zero wyjątek
try {
echo 1 / 0;
} catch (DivisionByZeroError $e) {
echo $e->getMessage(); // Division by zero
}
// NAN nie jest równe niczemu, nawet samemu sobie
$x = fdiv(0, 0);
var_dump($x == $x); // bool(false)
var_dump(is_nan($x)); // bool(true)
Zamiennik dla starszych wersji PHP
W wersjach starszych niż PHP 8.0 funkcji nie ma. Poniższy kod uzupełnia ją tylko tam, gdzie jej brakuje, nowsze wersje używają funkcji wbudowanej.
// PHP 7 przy dzieleniu przez zero wypisuje ostrzeżenie, ale wynik jest ten sam (INF, -INF, NAN)
if (!function_exists("fdiv")) {
function fdiv($num1, $num2) {
return @((float) $num1 / $num2);
}
}
var_dump(fdiv(10, 5)); // float(2)
var_dump(fdiv(1, 0)); // float(INF)
Na co uważać
- Wynik jest zawsze liczbą dziesiętną (float), nawet gdy dzielenie wychodzi bez reszty.
- INF i NAN rozprzestrzeniają się w dalszych obliczeniach i nie da się ich zapisać ani w bazie danych, ani w JSON. Sprawdzaj wynik funkcją is_finite() albo is_nan().
- Operator / w PHP 7 przy dzieleniu przez zero wypisuje ostrzeżenie i zwraca INF albo NAN, w PHP 8 rzuca DivisionByZeroError.
- Dzielenie całkowite wykona intdiv(), resztę fmod(). Do obliczeń na pieniądzach nie używaj liczb dziesiętnych (float).
Powiązane funkcje:
intdiv()
fmod()
is_nan()
is_infinite()
is_finite()