0
votes

Précision de grand nombre en JavaScript

Je fais la pratique de montrer un grand nombre avec factorielle. Le problème est-il toujours rond automatiquement lorsque le résultat est trop grand. Voici un exemple:

p>

function extraLongFactorials(n) {
    const rs = [...Array(n)].reduce((a, b, i) => a*(i+1), 1);
    console.log(rs);
}

extraLongFactorials(25);


0 commentaires

3 Réponses :


1
votes

Vous pouvez utiliser un Bigint :

p>

function extraLongFactorials(n) {
  const rs = [...Array(n)].reduce((a, b, i) => a * Bigint(i + 1), 1 n);
  console.log("" + rs)
}

extraLongFactorials(25);


3 commentaires

Notez que cela ne fonctionne pas pour plusieurs raisons: le plus grand est que vous convertissez-vous en plus tard, de sorte que le résultat a déjà perdu de la précision. La seconde est votre plainte que cela ne fonctionne pas sur les extraits de pile - les extraits de pile ne savent tout simplement pas comment l'afficher, vous devez donc les convertir en chaîne vous-même. J'ai posté une version corrigée dans ma réponse.


Oh oui @Amadan, désolé pour ça.


Mon mauvais @amadan - c'était mon navigateur qui ne l'a pas soutenait.



1
votes

Utilisez Bigint si l'intermédiaire prévu est plus que Number.Max_Safe_Integer

Regardez Snippet Si vous recherchez quelque chose sans Bigint et toute restriction de support. p>

p>

function extraLongFactorials(n) {
	const rs = [...Array(n)].reduce((a, b, i) => a*(i+1), 1)
	console.log('output-'+BigInt(rs))
}
console.log(Number.MAX_SAFE_INTEGER)
extraLongFactorials(25)


0 commentaires

2
votes

Cela devrait fonctionner dans tous les navigateurs qui soutiennent actuellement Bigint. Notez que les opérations entre Bigint et numéro ne se mélangent pas, nous devons donc commencer avec Bigint en premier lieu (remarquez le n code> sigil à 1n code>). rs.tostring () code> est requis par StackSnippet car il fausse la console et la fausse console ne sait toujours pas comment imprimer plusieurs types de données plus récents de ES6 +; La vraie console saura imprimer un Bigint Normalement.

p>

function extraLongFactorials(n) {
    const rs = [...Array(n)].reduce((a, b, i) => a*(BigInt(i+1)), 1n)
    console.log(rs.toString())
}

extraLongFactorials(25)


0 commentaires