Start · Sprachen · PHP · Referenz · is_finite

is_finite

Funktion

Prüft, ob eine Gleitkommazahl einen endlichen (finiten) Wert hat, also weder unendlich (<code>INF</code>) noch <code>NAN</code> ist.

seit PHP 4.0.0 Kategorie: math

Signatur

is_finite(float $num): bool

Beschreibung

is_finite() gibt true zurück, wenn der übergebene Gleitkommawert eine reguläre, endliche Zahl ist – also weder positiv/negativ unendlich (INF bzw. -INF) noch kein-Zahl (NAN). In allen anderen Fällen wird false zurückgegeben.

Die Funktion ist besonders nützlich, wenn das Ergebnis mathematischer Operationen validiert werden muss, bevor es weiterverarbeitet wird. Typische Quellen für nicht-endliche Werte sind Divisionen durch null (liefert INF), Logarithmen von null oder negativen Zahlen, oder Arkussinus/Arkuskosinus von Werten außerhalb des Wertebereichs.

  • Endliche Zahl: gibt true zurück (z. B. 3.14, -42.0, 0.0).
  • INF oder -INF: gibt false zurück.
  • NAN: gibt false zurück.

Als Gegenstück existieren is_infinite() für den Test auf Unendlichkeit und is_nan() für den Test auf NAN. Zusammen decken diese drei Funktionen alle möglichen Zustände eines PHP-Floats ab.

Parameter

Name Typ Default Beschreibung
$num Pflicht float Der zu prüfende Gleitkommawert.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn num eine endliche Zahl ist. Gibt false zurück, wenn num gleich INF, -INF oder NAN ist.

Beispiele

Grundlegende Verwendung mit verschiedenen Werten

<?php
var_dump(is_finite(3.14));    // normale Zahl
var_dump(is_finite(INF));     // positiv unendlich
var_dump(is_finite(-INF));    // negativ unendlich
var_dump(is_finite(NAN));     // kein-Zahl
var_dump(is_finite(0.0));     // null ist endlich
var_dump(is_finite(1.0 / 0)); // Division durch null => INF
// PHP erzeugt hier eine Division-durch-null-Warnung; der zurückgegebene Wert ist INF
bool(true) bool(false) bool(false) bool(false) bool(true) bool(false)

Absicherung vor der Weiterverarbeitung eines Rechenergebnisses

<?php
function berechneLogarithmus(float $wert): string
{
    $ergebnis = log($wert);

    if (!is_finite($ergebnis)) {
        return 'Ungültiger Wert: Logarithmus ist nicht endlich (z. B. bei 0 oder negativen Zahlen)';
    }

    return 'log(' . $wert . ') = ' . $ergebnis;
}

echo berechneLogarithmus(M_E) . PHP_EOL;  // normaler Fall
echo berechneLogarithmus(0.0) . PHP_EOL;  // ergibt -INF
echo berechneLogarithmus(-5.0) . PHP_EOL; // ergibt NAN
log(2.718281828459) = 1 Ungültiger Wert: Logarithmus ist nicht endlich (z. B. bei 0 oder negativen Zahlen) Ungültiger Wert: Logarithmus ist nicht endlich (z. B. bei 0 oder negativen Zahlen)

// Wichtig · Fallstricke

Wichtig: PHP gibt bei einer Division durch null (z. B. 1.0 / 0) einen INF-Wert zurück und erzeugt gleichzeitig eine Division by zero-Warnung. Der Fehler muss also separat behandelt werden; is_finite() allein verhindert die Warnung nicht.

Bei der Übergabe eines Integer-Werts an is_finite() wird dieser intern in einen Float konvertiert. Normale Integer-Werte liefern daher immer true.