Je résous une question sur hackerrank et j'ai rencontré un problème. ma méthode slice ne renvoie pas la bonne valeur. J'ai pu recréer en utilisant console.log.

console.log(+("9007199254740993"));

console.log("9007199254740993");

Pourquoi renvoient-ils des valeurs différentes ?

-2
Pbb 17 mars 2019 à 03:24

2 réponses

Meilleure réponse

La plus grande valeur possible pour un numéro JavaScript est 9007199254740991 .

Pour traiter des nombres plus grands que cela, vous devrez utiliser un BigInt.

const max = Number.MAX_SAFE_INTEGER;
console.log(max);

const maxPlusTwo = max + 2;
console.log(maxPlusTwo);

const maxPlusTwoBigInt = BigInt("9007199254740993");
console.log(maxPlusTwoBigInt.toString());

Ce lien indique le niveau actuel de prise en charge native de BigInt. En fonction de votre plate-forme cible, vous devrez peut-être utiliser un polyfill pour la fonctionnalité BigInt.

1
Brian Adams 17 mars 2019 à 00:48

JavaScript a une limite maximale d'entiers sûrs de 2^53 - 1 (9,007,199,254,740,991) - il est possible d'avoir des nombres supérieurs à cela, mais ce n'est pas très bon :

console.log(9007199254740992 + 200000000001);
console.log(Number.MAX_SAFE_INTEGER);

(L'extrait ci-dessus montre qu'ils sont différents - regardez les cinquième et dernier chiffres).

Vous devrez utiliser un BigIntexpérimental si vous vouliez de plus grands nombres.

1
Jack Bashford 17 mars 2019 à 00:36