floatval()
Die Funktion floatval() ist eine eingebaute PHP-Funktion, die eine Variable in eine Gleitkommazahl (float) umwandelt. Sie ähnelt der Funktion doubleval().
Einführung
Die Funktion floatval() ist eine eingebaute PHP-Funktion, die den Gleitkomma-Wert (float) einer Variable zurückgibt. Sie verwenden sie immer dann, wenn Sie einen Wert mit unbekanntem Typ haben – typischerweise einen string aus einem Formular, einem Query-String, einer CSV-Datei oder einem JSON-Payload – und sicherstellen möchten, dass Sie mit einer Zahl arbeiten, mit der Sie Berechnungen durchführen können.
floatval() ist ein Alias von doubleval(). PHP hat keinen separaten double-Typ – float und double sind dieselbe Sache –, daher sind die beiden Funktionen austauschbar; floatval() ist die Schreibweise, die Sie in neuem Code bevorzugen sollten.
Diese Seite behandelt die Syntax, wie die Funktion verschiedene Eingaben verarbeitet (einschließlich der anfangs überraschenden Regel für strings), wie sie sich zum (float)-Cast verhält und welche Fallstricke es zu beachten gilt.
Syntax
float floatval(mixed $value)Die Funktion nimmt ein einzelnes Argument, $value, und gibt dessen float-Wert zurück. Das Argument sollte ein Skalar sein (string, int, float oder boolean); die Übergabe eines array gibt 1.0 für ein nicht-leeres array und 0.0 für ein leeres zurück, und die Übergabe eines object löst einen Fehler aus.
Verwendungsbeispiel
Das folgende Beispiel konvertiert verschiedene Typen und gibt das Ergebnis aus. Beachten Sie, dass floatval() einen float zurückgibt, aber wenn PHP einen ganzzahligen float mit echo ausgibt, wird die abschließende .0 weggelassen – daher wird 42.0 als 42 angezeigt.
Hier ist $var1 ein numerischer string, $var2 eine ganze Zahl, $var3 ein boolean und $var4 ein string ohne führende Zahl. Jeder wird in einen float umgewandelt. Um zu bestätigen, dass das Ergebnis wirklich ein float ist (anstatt sich auf die Ausgabe von echo zu verlassen), verpacken Sie einen Wert in var_dump(): var_dump(floatval(42)); gibt float(42) aus.
Wie strings verarbeitet werden
Dies ist der Teil, der Entwickler überrascht. Bei einem string liest floatval() den führenden numerischen Anteil und hält beim ersten Zeichen an, das kein Teil einer Zahl sein kann. Die gesamte Zeichenkette muss nicht numerisch sein.
<?php
echo floatval("12.5abc") . "\n"; // 12.5 (stops at "a")
echo floatval(" 7.0kg") . "\n"; // 7 (leading whitespace is skipped)
echo floatval("1.0e3") . "\n"; // 1000 (scientific notation is understood)
echo floatval("$199.99") . "\n"; // 0 (starts with "$", no leading number)
echo floatval("0x1A") . "\n"; // 0 (hex strings are NOT parsed)
echo floatval("") . "\n"; // 0 (empty string)
?>Die wichtigsten Regeln:
- Führende Leerzeichen werden ignoriert; die Analyse beginnt beim ersten Nicht-Leerzeichen.
- Wissenschaftliche Notation (
1.0e3) und ein führendes Vorzeichen (-3.5,+2) werden erkannt. - Die Analyse stoppt beim ersten nicht-numerischen Zeichen, und alles danach wird verworfen.
- Wenn am Anfang überhaupt keine Zahl vorhanden ist, ist das Ergebnis
0.0. Das bedeutet, dass ein Währungsstring wie"$199.99"den Wert0ergibt, nicht199.99– entfernen Sie das Symbol zuerst. - Hexadezimale strings wie
"0x1A"werden als die Zahl0behandelt, da die Analyse beimxstoppt.
floatval() vs. der (float)-Cast
floatval($x) und (float) $x liefern für skalare Eingaben dasselbe Ergebnis, daher ist der Cast bei einem einzelnen Wert kürzer:
<?php
$price = "49.95 USD";
echo floatval($price) . "\n"; // 49.95
echo (float) $price . "\n"; // 49.95
?>Der Vorteil von floatval() besteht darin, dass es ein Callable ist. Sie können es direkt an höherwertige Funktionen übergeben, wo ein Cast-Schlüsselwort nicht verwendet werden kann:
<?php
$inputs = ["1.5", "2.25", "x", "3"];
$floats = array_map('floatval', $inputs);
print_r($floats);
// Array ( [0] => 1.5 [1] => 2.25 [2] => 0 [3] => 3 )
?>Wenn Sie eine strikte Validierung benötigen – also alles ablehnen, was keine saubere Zahl ist, anstatt es stillschweigend zu konvertieren – verwenden Sie is_numeric() oder filter_var($x, FILTER_VALIDATE_FLOAT) vor der Konvertierung, da floatval() niemals einen Fehler meldet.
Wann es verwendet werden sollte
- Normalisierung von Benutzereingaben (
$_POST,$_GET) oder CSV-/Textdaten vor mathematischen Operationen. - Als Callback für
array_map(),usort()-Vergleiche und Ähnliches. - Konvertierung eines Wertes, dessen Typ Sie nicht kontrollieren, in einen garantierten
float.
Wenn Sie stattdessen eine ganze Zahl möchten, verwenden Sie intval(); um den Typ einer Variable direkt zu ändern, verwenden Sie settype(); um einen Typ zu prüfen, verwenden Sie gettype() oder is_float(). Einen Überblick darüber, wie PHP Typen behandelt, finden Sie unter PHP Data Types.
Fazit
floatval() gibt den float-Wert eines beliebigen Skalars zurück und wirft bei ungültiger Eingabe keine Exception – es fällt stattdessen auf 0.0 zurück. Das macht es praktisch, bedeutet aber auch, dass Sie zuerst validieren sollten, wenn eine fehlende oder fehlerhafte Zahl als Fehler behandelt werden muss. Denken Sie an die Regel zum führenden numerischen string ("12.5abc" wird zu 12.5, "$199.99" wird zu 0), und greifen Sie auf floatval() statt eines Casts zurück, wenn Sie die Konvertierung als Callback übergeben müssen.