Comment obtenir un résultat entier précis pour multiplication et division opérations d'un grand nombre dans JS?
Disons que nous avons:
var a = 75643564363473453456342378564387956906736546456235342;
var b = 34986098309687982743378379458582778387652482;
Multiplier ces nombres me donne un nombre en notation scientifique «e». Comment afficher le nombre entier de résultat entier précis?
J'ai essayé d'utiliser cette bibliothèque https://github.com/peterolson/BigInteger.js
Readme dit:
Notez que les nombres Javascript supérieurs à 9007199254740992 et plus petit que -9007199254740992 ne sont pas représentés précisément chiffres et ne produira pas de résultats exacts. Si vous avez affaire à nombres en dehors de cette plage, il vaut mieux passer des chaînes.
Mais comment faites-vous des mathématiques avec des chaînes?
Réponses:
3 pour la réponse № 1Utilisez bigInt, comme vous l'avez laissé entendre, vous devez utiliser des chaînes au lieu de nombres pour les représenter correctement.
bigInt("75643564363473453456342378564387956906736546456235342").multiply("34986098309687982743378379458582778387652482");
-1 pour la réponse № 2
Je pense que cette question est une duplication de comment éviter la notation scientifique pour les grands nombres en javascript
Cette fonction est tirée du lien ci-dessus.
function toFixed(x) {
if (Math.abs(x) < 1.0) {
var e = parseInt(x.toString().split("e-")[1]);
if (e) {
x *= Math.pow(10,e-1);
x = "0." + (new Array(e)).join("0") + x.toString().substring(2);
}
} else {
var e = parseInt(x.toString().split("+")[1]);
if (e > 20) {
e -= 20;
x /= Math.pow(10,e);
x += (new Array(e+1)).join("0");
}
}
return x;
}
alert(toFixed(a*b));