Heim  >  Artikel  >  Backend-Entwicklung  >  Parsen des PHP-Datentyps Gleitkommatyp (Float)

Parsen des PHP-Datentyps Gleitkommatyp (Float)

怪我咯
怪我咯Original
2017-04-05 10:42:032459Durchsuche

Float (auch FloatFloat, double oder real genannt) kann mit einer der folgenden Syntaxen definiert werden:

<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>

Gleitkommazahlendarstellung:

LNUM [0-9]+
DNUM ([0-9]*[.]{LNUM }) | }[.][0-9]*)
EXPONENT_DNUM [+-]?(({LNUM} | {DNUM}) [eE][+-]? {LNUM})

Das Wort Die Länge von Gleitkommazahlen ist plattformabhängig, obwohl der Maximalwert normalerweise 1,8e308 mit einer Genauigkeit von 14 Dezimalstellen (64-Bit-IEEE-Format) beträgt.

Warnung

Die Genauigkeit von Gleitkommazahlen

Die Genauigkeit von Gleitkommazahlen ist begrenzt. Obwohl es vom System abhängt, verwendet PHP normalerweise das IEEE 754-Doppelformat, sodass der maximale relative Fehler aufgrund der Rundung 1,11e-16 beträgt. Nicht grundlegende mathematische Operationen können zu größeren Fehlern führen, und die Fehlerfortpflanzung bei der Durchführung zusammengesetzter Operationen muss berücksichtigt werden.

Darüber hinaus können rationale Zahlen wie 0,1 oder 0,7, die unabhängig von der Anzahl der Mantissen genau dezimal dargestellt werden können, durch die intern verwendete Binärzahl nicht genau dargestellt werden und können daher nicht ohne Verlust in Binärzahlen umgewandelt werden ein bisschen Präzision. Dies kann zu verwirrenden Ergebnissen führen: Beispielsweise gibt floor((0.1+0.7)*10) normalerweise 7 statt der erwarteten 8 zurück, da die interne Darstellung des Ergebnisses tatsächlich etwa 7.9999999999999991118... ist.

Vertrauen Sie also niemals darauf, dass das Ergebnis einer Gleitkommazahl bis zur letzten Ziffer genau ist, und vergleichen Sie niemals zwei Gleitkommazahlen auf Gleichheit. Wenn Sie wirklich eine höhere Präzision benötigen, sollten Sie die Funktion „Arbiträre Präzisionsmathematik“ oder die Funktion „gmp“ verwenden.

Eine einfache Erklärung finden Sie auf der Webseite „Floating Point Guide“.

In Gleitkommazahl umwandeln

Wenn Sie Informationen darüber wünschen, wann und wie Sie einen String in eine Gleitkommazahl umwandeln, lesen Sie „Converting a String to a Number Festival“. . Bei anderen Werttypen ist die Situation ähnlich wie bei der Konvertierung des Werts in eine Ganzzahl und dann in einen Gleitkommawert. Weitere Informationen finden Sie im Abschnitt „Konvertieren in eine Ganzzahl“. Wenn Sie ab PHP 5 versuchen, ein -Objekt in eine Gleitkommazahl zu konvertieren, wird eine E_NOTICE-Fehlermeldung ausgegeben.

Gleitkommazahlen vergleichen

Wie die obige Warnmeldung besagt, besteht aus internen Ausdrucksgründen ein Problem beim Vergleich zweier Gleitkommazahlen auf Gleichheit. Es gibt jedoch Umwege, Gleitkommawerte zu vergleichen.

Um Gleitkommazahlen auf Gleichheit zu testen, verwenden Sie einen minimalen Fehlerwert, der nur einen Punkt größer als dieser Wert ist. Dieser Wert wird auch Maschinenminimalwert (Epsilon) genannt oder die kleinste Einheit ist eine ganze Zahl , die der kleinste in Berechnungen akzeptable Differenzwert ist.

$a und $b entsprechen einer Genauigkeit von fünf Dezimalstellen.

<?php
$a = 1.23456789;
$b = 1.23456780;
$epsilon = 0.00001;
if(abs($a-$b) < $epsilon) {
   echo "true";
}
?>
NaN

Bestimmte mathematische Operationen erzeugen ein Ergebnis, das durch die

Konstante NAN dargestellt wird. Dieses Ergebnis stellt einen Wert dar, der in der Gleitkommaarithmetik undefiniert oder nicht darstellbar ist. Das Ergebnis eines losen oder strengen Vergleichs dieses Werts mit einem anderen Wert ist FALSE.

Da NAN einen beliebigen anderen Wert darstellt, sollte NAN nicht mit anderen Werten, einschließlich sich selbst, verglichen und mit is_nan() überprüft werden.

Das obige ist der detaillierte Inhalt vonParsen des PHP-Datentyps Gleitkommatyp (Float). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn