Fließkommazahlen (auch bekannt als "floats", "doubles" oder "real numbers") können in jeder der folgenden Syntaxformen angegeben werden:
<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>
Formell:
LNUM [0-9]+ DNUM ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*) EXPONENT_DNUM [+-]?(({LNUM} | {DNUM}) [eE][+-]? {LNUM})
Der Wertebereich für Fließkommawertes ist platformabhängig, alderdings ist ein maximaler Wert von ca. 1.8e308 mit einer Genauigkeit von ca. 14 Nachkommastellen (entsprechend dem 64bit IEEE-Format) üblich.
Fließkommazahlen haben eine begrenzte Präzision. PHP nutzt normalerweise (dies hängt aber vom System ab) das IEEE 754 double precision Format, welches einen maximalen relativen Fehler von 1.11e-16 hat. Nicht elementare Rechenoperationen können einen größeren Fehler verursachen und bei Durchführung von mehreren Operationen können sich die Fehler addieren.
Weiterhin können viele rationale Zahlen, die zwar eine genaue Darstellung zur Basis 10 besitzen, wie beispielsweilse 0.1 oder 0.7, nicht genau als Gleitkommazahl zur intern genutzten Basis 2 dargestellt werden, unabhängig von der Größe der Mantisse. Daher können sie nicht ohne einen gewissen Präzisionsverlust in ihr internes binäres Gegenstück umgewandelt werden können. Dies kann zu verwirrenden Ergebnissen führen, so ergibt floor((0.1+0.7)*10) in der Regel 7 an Stelle der erwarteten 8, da die interne Repräsentation etwa wie folgt aussieht: 8
Sie sollten daher Fließkommawerten nicht bis auf die letzte Nachkommastelle trauen und vor allem niemals Fließkommawerte auf exakte Gleichheit prüfen. Wenn Sie höhere Genauigkeit benötigen können Sie die Mathematikfunktionen für beliebige Genauigkeit oder die gmp-Funktionen nutzen.
Informationen zur Umwandlung von Strings in float finden Sie im Abschnitt Umwandlung von Zeichenketten in Zahlen. Andere Datentypen werden zunächst in einen integer-Wert umgewandelt und von da aus weiter in einen Fließkommawert. Mehr Informationen hierzu finden Sie im Abschnitt Umwandlung in Integerwerte. Beginnend mit PHP 5 wird bei der Umwandlung eines Objects in float eine Hinweismeldung geworfen.