Große Zahlen in JavaScript falsch abgeschnitten
Es stellt sich die Frage, warum große Zahlen, wie z. B. 714341252076979033, beim Parsen aus einer JSON-Zeichenfolge falsch gerundet werden mit JSON.parse(). Der resultierende Wert in der Konsole zeigt eine gekürzte Zahl an, bei der signifikante Ziffern entfernt wurden.
Antwort
Dieses Phänomen tritt auf, weil der Zahlentyp von JavaScript auf IEEE-754 basiert Gleitkomma mit doppelter Genauigkeit, hat Einschränkungen bei der Darstellung großer Ganzzahlen. Gleitkommazahlen mit doppelter Genauigkeit haben einen maximalen sicheren ganzzahligen Wert von 9.007.199.254.740.991 (Number.MAX_SAFE_INTEGER). Über diesen Punkt hinaus nimmt die Genauigkeit der Gleitkommadarstellung ab, was zur Rundung aufeinanderfolgender Ganzzahlen führt.
In diesem speziellen Fall übersteigt die große Zahl, die analysiert wird, Number.MAX_SAFE_INTEGER um ein Vielfaches. Folglich schneidet der von JavaScript verwendete Rundungsalgorithmus die niedrigstwertigen Ziffern ab, um die Zahl innerhalb der Grenzen seines Gleitkommasystems so genau wie möglich darzustellen.
Problemumgehung
Um dieses Problem zu vermeiden, wird empfohlen, BigInt für die Darstellung großer Ganzzahlen zu verwenden, die über die Kapazität des Zahlentyps von JavaScript hinausgehen. BigInt ist ein in ES2020 hinzugefügter Datentyp, der Ganzzahlen beliebiger Länge verarbeiten kann. Es ist jedoch wichtig zu beachten, dass BigInt in JSON nicht nativ unterstützt wird, sodass alternative Methoden zur Darstellung und Analyse großer Ganzzahlen verwendet werden müssen.
Ein Ansatz besteht darin, beim Parsen von JSON eine Reviver-Funktion zu verwenden. Die Reviver-Funktion kann eine Zeichenfolgendarstellung einer großen Ganzzahl in ein BigInt-Objekt konvertieren, sodass sie innerhalb der JavaScript-Anwendung korrekt verarbeitet werden kann.
Das obige ist der detaillierte Inhalt vonWarum werden große Zahlen bei der Verwendung von JSON.parse() in JavaScript abgeschnitten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!