8
votes

Opposé de numéro.toExponentiel dans JS

J'ai besoin d'obtenir la valeur d'un nombre extrêmement grand en JavaScript sous forme non exponentielle. Number.Tofixed code> le renvoie simplement sous forme exponentielle en tant que chaîne, ce qui est pire que ce que j'avais.

C'est ce que number.tofixed p> retourne: P> xxx pré>

numéro.topision code> ne fonctionne pas non plus: p> xxx pré>

Ce que je voudrais, c'est: P >

>>> x = 1e+31
1e+31
>>> x.toNotExponential()
"10000000000000000000000000000000"


0 commentaires

5 Réponses :


4
votes

Vous pouvez utiliser toprecision code> avec un paramètre spécifiant comment De nombreux chiffres que vous souhaitez afficher:

x.toPrecision(31)


2 commentaires

Je vais bien, ce n'est pas un nombre réel quand je l'obtiens (il est à des fins d'affichage), mais la toprecision ne fonctionne pas non plus pour des chiffres supérieurs à 1e + 21. Dans ce cas particulier, je reçois "9,999999999999999963590e + 30". Je vais mettre à jour la question en conséquence.


@OZ: Oui, c'est ce que j'ai mentionné. Je ne pense pas qu'il y ait une autre manière intégrée pour obtenir des chaînes pour de tels nombres importants.



0
votes

Il est possible d'étendre la sortie exponentielle de JavaScript à l'aide de fonctions de chaîne. Certes, ce que je suis venu est un peu cryptique, mais cela fonctionne si l'exposant après le E code> est positif:

var originalNumber = 1e+31;
var splitNumber = originalNumber.toString().split('e');

var result;
if(splitNumber[1]) {
    var regexMatch = splitNumber[0].match(/^([^.]+)\.?(.*)$/);
    result =
        /* integer part */ regexMatch[1] +
        /* fractional part */ regexMatch[2] +
        /* trailing zeros */ Array(splitNumber[1] - regexMatch[2].length + 1).join('0');
} else result = splitNumber[0];


1 commentaires

J'utilise actuellement ma propre fonction de conversion qui scindre la version de ToString du numéro, similaire à la vôtre, sans que la matrice vide s'affiche. Cependant, je cherche une fonction JS natif pour le faire pour moi.



0
votes

"100000000000000000000000000000000000"?

difficile à croire que tout le monde préférerait regarder cela que 1.0e + 31,

ou en HTML: 10 31 . Mais voici une façon, une grande partie est pour les exposants négatifs (fractions): xxx


1 commentaires

Il doit être affiché sous forme de valeur en dollars et 1e $ + 31 ne lit pas bien. La valeur est si élevée car elle est la saisie de l'utilisateur et que les utilisateurs sont fous. Merci pour la fonction, mais j'ai déjà une fonction que j'ai écrite pour le faire, je me demandais s'il y avait une intégrée en une.



1
votes

La réponse est qu'il n'y a pas de fonction intégrée de ce type. J'ai cherché haut et bas. Voici le réégycle que j'utilise pour diviser le nombre en signe, coefficient (chiffres avant point décimal), partie fractionnée (chiffres après décimal) et expression: xxx

"roule ton propre" est la réponse , que vous avez déjà fait.


2 commentaires

J'ai depuis longtemps oublié ce que j'ai fait pour résoudre ce problème, mais vous êtes correct qu'il n'y a pas de méthode intégrée pour ce faire.


@OZ Hey Hey Merci Man, enfin, je peux commenter des questions! C'est une grosse douleur avec les méthodes d'impression intégrées, comme un "printf" serait sûrement agréable. Je travaille sur une classe NumberFormatter personnalisée maintenant ..



4
votes

Utiliser numéro (chaîne)

Exemple: xxx

Retour:

a = 110


2 commentaires

C'est le contraire de ce que je vais faire. Il y a beaucoup de façons d'aller d'une chaîne à un numéro, mais je cherche à passer d'un nombre extrêmement grand à la chaîne sans utiliser d'exponenciation.


alors quoi d'environ Var A = nombre ("9.9e-8"); ?? Ça ne fonctionne pas.. :(