Rechercher une fonction PHP

Gleitkommazahlen

Gleitkommazahlen (auch als "floats", "doubles" oder "reelle Zahlen" bezeichnet) können anhand einer der folgenden Schreibweisen bezeichnet 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})

Die Größe einer Gleitkommazahl ist plattformabhängig, ein Maximalwert von circa 1.8e308 mit einer Präzision von ungefähr 14 Dezimal-Nachkommastellen ist jedoch ein üblicher Wert (64-Bit IEEE-Format).

Warnung

Genauigkeit von Gleitkommazahlen

Gleitkommazahlen haben eine begrenzte Präzision. Obgleich dies vom System abhängig ist, verwendet PHP üblicherweise das IEEE 754 Double Precision Format, welches einen maximalen relativen Rundungsfehler in einer Größenordnung en 1.11e-16 ergibt. Nicht-Elementare arithmetische Operationen können jedoch größere Fehler hervorgerufen und natürlich muss eine Fortpflanzung des Fehlers berücksichtigt werden, wenn mehrere Operationen zusammengesetzt werden.

Außerdem gibt es rationale Zahlen die zur Basis 10 als Gleitkommazahlen exakt dargestellt werden können, beispielsweise 0.1 or 0.7, für die es aber keine exakte Repräsentation als Gleitkommazahlen zur Basis 2 gibt, welche intern aber unabhängig von der Größe der Mantisse verwendet wird. Daher können Sie nicht ohne einen geringen Präzisionsverlust in ihre intern binäre Darstellung umgewandelt werden. Dies kann zu verwirrendenErgebnissen führen: floor((0.1+0.7)*10) wird üblicherweise 7 ergeben statt des erwarteten Ergebnises von 8, da die interne Repräsentation etwas ist wie 7.9999999999999991118....

Man sollte sich daher niemals bis zur letzten Nachkommastelle auf Fließkommazahlen verlassen und Fließkommazahlen niemals direkt auf Gleichheit prüfen. Wenn eine höhere Präzision notwendig ist, stehen die Mathematikfunktionen mit beliebiger Präzision und gmp-Funktionen zur Verfügung.

Für eine "einfache" Erklärung, steht der Ratgeber » Floating Point Guide zur Verfügung, welchee auch den Titel hat "Why don’t my numbers add up?"

Erste Seite von PHP-Handbuch Inhaltsverzeichnis Haut

Konvertierung in float

Informationen zur Konvertierung von Strings zu Floats findet man unter Konvertierung von Zeichenketten zu Zahlen. Werte alle anderen Typen werden konvertiert, indem der Wert zuerst in den Typ Integer konvertiert wird und dieser anschließend zu Float. Weitere Informationen findet man unter Konvertierung in Integer. Seid PHP 5 wird eine Notice erzeugt, wenn ein Object in einen Float konvertiert wird.

Erste Seite von PHP-Handbuch Inhaltsverzeichnis Haut

Gleitkommazahlen vergleichen

Wie in der obigen Warnung bereits dargestellt, ist es problematisch Gleitkommazahlen auf Gleichheit zu überprüfen, aufgrund ihrer internen Darstellungsart. Es gibt allerdings Wege diese Vergleiche von Gleitkommazahlen anzustellen, die diese Beschränkungen umgehen.

Um Gleitkommazahlen auf Gleichheit zu prüfen, wird eine obere Schranke für den Rundungsfehler verwendet. Dieser Wert ist bekannt als Maschinengenauigkeit Epsilon bekannt und stellt die kleinste annehmbare Differenz in der Berechnung dar.

$a und $b sind bis auf 5 Nachkommastellen gleich.

<?php
$a 
1.23456789;
$b 1.23456780;
$epsilon 0.00001;

if(
abs($a-$b) < $epsilon) {
    echo 
"true";
}
?>

Erste Seite von PHP-Handbuch Inhaltsverzeichnis Haut

NaN

Einige numerische Operationen können einen Wert ergeben der durch die Konstante NAN repräsentiert wird. Dieses Ergebnis repräsentiert einen undefinierten oder nicht darstellbaren Wert in den Fließkommaberechnungen. Jeder strikte oder nicht strikte Vergleich dieses Werts mit jedem beliebigen anderen Wert, inklusive sich selbst, nur nicht TRUE, wird ein Ergebnis von FALSE hervorbringen.

Da NAN eine beliebige Anzahl von anderen Werten darstellen kann, sollte NAN nicht mit anderen Werten verglichen werden, einschließlich sich selbst. Stattdessen sollte zur Prüfung is_nan() verwendet werden.

Finde eine PHP-Funktion

Deutsche Übersetzung

Sie haben gebeten, diese Seite auf Deutsch zu besuchen. Momentan ist nur die Oberfläche übersetzt, aber noch nicht der gesamte Inhalt.

Wenn Sie mir bei Übersetzungen helfen wollen, ist Ihr Beitrag willkommen. Alles, was Sie tun müssen, ist, sich auf der Website zu registrieren und mir eine Nachricht zu schicken, in der Sie gebeten werden, Sie der Gruppe der Übersetzer hinzuzufügen, die Ihnen die Möglichkeit gibt, die gewünschten Seiten zu übersetzen. Ein Link am Ende jeder übersetzten Seite zeigt an, dass Sie der Übersetzer sind und einen Link zu Ihrem Profil haben.

Vielen Dank im Voraus.

Dokument erstellt 30/01/2003, zuletzt geändert 26/10/2018
Quelle des gedruckten Dokuments:https://www.gaudry.be/de/php-rf-language.types.float.html

Die Infobro ist eine persönliche Seite, deren Inhalt in meiner alleinigen Verantwortung liegt. Der Text ist unter der CreativeCommons-Lizenz (BY-NC-SA) verfügbar. Weitere Informationen auf die Nutzungsbedingungen und dem Autor.

Referenzen

  1. Zeigen Sie - html-Dokument Sprache des Dokuments:fr Manuel PHP : http://php.net

Diese Verweise und Links verweisen auf Dokumente, die während des Schreibens dieser Seite konsultiert wurden, oder die zusätzliche Informationen liefern können, aber die Autoren dieser Quellen können nicht für den Inhalt dieser Seite verantwortlich gemacht werden.
Der Autor Diese Website ist allein dafür verantwortlich, wie die verschiedenen Konzepte und Freiheiten, die mit den Nachschlagewerken gemacht werden, hier dargestellt werden. Denken Sie daran, dass Sie mehrere Quellinformationen austauschen müssen, um das Risiko von Fehlern zu reduzieren.

Inhaltsverzeichnis Haut