Heim > Artikel > Backend-Entwicklung > Fragen zu PHP- und JS-Gleitkommaoperationen
0,1 + 0,2 Warum ist es nicht gleich 0,3? (Richtiges Ergebnis: 0,30000000000000004)
0,8 * 7 Warum ist es nicht gleich 5,6? (Richtiges Ergebnis: 5,6000000000000005)
var_dump(intval(0.58 * 100));
Das korrekte Ergebnis ist 57, nicht 58
Tatsächlich sind diese Ergebnisse nicht der Fall Sprachfehler, die jedoch mit der Sprache zusammenhängen. Aufgrund des Implementierungsprinzips werden alle Zahlen in js als Zahlen vereinheitlicht, einschließlich Ganzzahlen, die eigentlich alle doppelte Typen sind.
Und PHP unterscheidet zwischen int und float. Unabhängig von der Sprache gibt es ähnliche Probleme, solange es sich um Gleitkommaoperationen handelt. Sie müssen daher bei der Verwendung darauf achten.
Gemäß dem internationalen Standard IEEE 754 kann jede binäre Gleitkommazahl V in der folgenden Form ausgedrückt werden:
V = (-1)s * M * E 1. (-1)s 表示符号位,当s=0,V为正数;当s=1,V为负数。 2. M表示有效数字,大于等于1,小于2。 3. 2E 表示指数位。
Zum Beispiel: Dezimal -5,0, binär geschrieben ist -101,0, was -1,01×22 entspricht. Dann ist s=1, M=1,01, E=2.
IEEE 754 schreibt vor, dass für eine 32-Bit-Gleitkommazahl das höchste 1 Bit das Vorzeichenbit s ist, die nächsten 8 Bits der Exponent E und die restlichen 23 Bits die signifikante Ziffer M sind.
Für eine 64-Bit-Gleitkommazahl ist das höchste 1 Bit das Vorzeichenbit S, die nächsten 11 Bits sind der Exponent E und die restlichen 52 Bits sind das signifikante Ziffer M.
IEEE 754 hat einige Sonderbestimmungen für die signifikante Ziffer M und den Exponenten E.
Wie bereits erwähnt, ist 1≤M6da58db456b81c5fd318b0712274c352
Das obige ist der detaillierte Inhalt vonFragen zu PHP- und JS-Gleitkommaoperationen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!