Grands nombres incorrectement tronqués en JavaScript
La question se pose de savoir pourquoi les grands nombres, tels que 714341252076979033, sont incorrectement arrondis lorsqu'ils sont analysés à partir d'une chaîne JSON. en utilisant JSON.parse(). La valeur résultante dans la console affiche un nombre tronqué, avec les chiffres significatifs supprimés.
Réponse
Ce phénomène se produit car le type de nombre de JavaScript, qui est basé sur IEEE-754 virgule flottante double précision, présente des limites dans la représentation de grands entiers. La virgule flottante double précision a une valeur entière sûre maximale de 9 007 199 254 740 991 (Number.MAX_SAFE_INTEGER). Au-delà de ce point, la précision de la représentation à virgule flottante diminue, entraînant un arrondi des entiers consécutifs.
Dans ce cas précis, le grand nombre analysé dépasse Number.MAX_SAFE_INTEGER d'une marge significative. Par conséquent, l'algorithme d'arrondi utilisé par JavaScript tronque les chiffres les moins significatifs pour représenter le nombre le plus fidèlement possible dans les limites de son système à virgule flottante.
Solution de contournement
Pour éviter ce problème, il est recommandé d'utiliser BigInt pour représenter de grands entiers qui dépassent la capacité du type numérique de JavaScript. BigInt est un type de données ajouté dans ES2020 qui peut gérer des entiers de longueur arbitraire. Cependant, il est important de noter que BigInt n'est pas pris en charge nativement dans JSON, des méthodes alternatives doivent donc être utilisées pour représenter et analyser de grands entiers.
Une approche consiste à utiliser une fonction reviver lors de l'analyse de JSON. La fonction reviver peut convertir une représentation sous forme de chaîne d'un grand entier en un objet BigInt, lui permettant d'être géré correctement dans l'application JavaScript.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!