web-dev-qa-db-fra.com

JavaScript prend-il en charge les entiers 64 bits?

J'ai le code suivant:

var str = "0x4000000000000000";   //4611686018427387904 decimal
var val = parseInt(str);
alert(val);

J'obtiens cette valeur: "4611686018427388000", lequel est 0x4000000000000060

Je me demandais si JavaScript gère mal les entiers 64 bits ou est-ce que je fais quelque chose de mal?

72
ahmd0

JavaScript représente les nombres en utilisant le format IEEE-754 double précision (64 bits). Si je comprends bien, cela vous donne une précision de 53 bits, ou quinze à seize chiffres décimaux. Votre numéro comporte plus de chiffres que JavaScript ne peut en supporter, vous vous retrouvez donc avec une approximation.

Ce n'est pas vraiment une "mauvaise gestion" en tant que telle, mais évidemment ce n'est pas très utile si vous avez besoin d'une précision totale sur de grands nombres. Il existe quelques bibliothèques JS qui peuvent gérer de plus grands nombres, par exemple BigNumber et Int64 .

79
nnnnnn

Chromium version 57 et ultérieures prend en charge nativement les entiers de précision arbitraire. Cela s'appelle BigInt et est en cours d'élaboration pour les autres navigateurs également. C'est considérablement plus rapide que les implémentations JavaScript.

8
Shnatsel