101 votes

JavaScript: arrondissez le nombre de décimales, mais supprimez les zéros supplémentaires

Voici le scénario: je reçois .9999999999999999 alors que je devrais être en train de 1.0.
Je peux me permettre de perdre un nombre de décimales de précision, donc je suis en utilisant .toFixed(15), quel type d'œuvres.

L'arrondi fonctionne, mais le problème est que je me suis donné, 1.000000000000000.
Est-il un moyen pour arrondir à un nombre de décimales, mais la bande supplémentaire espaces?

Remarque: .toPrecision n'est pas ce que je veux; je veux seulement pour spécifier le nombre de chiffres après le point décimal.
Note 2: je ne peut pas utiliser .toPrecision(1) parce que j'ai besoin de garder la haute précision pour les nombres qui ont réellement des données après le point décimal. Idéalement, il serait exactement autant de décimales que nécessaire (jusqu'à 15).

161voto

Gus Points 3577
>>> parseFloat(0.9999999.toFixed(4));
1
>>> parseFloat(0.0009999999.toFixed(4));
0.001
>>> parseFloat(0.0000009999999.toFixed(4));
0

41voto

Nayish Points 3342

Oui, il y a un moyen. Utilisez parseFloat() .

 parseFloat((1.005).toFixed(15)) //==> 1.005
parseFloat((1.000000000).toFixed(15)) //==> 1
 

Voir un exemple en direct ici: http://jsfiddle.net/nayish/7JBJw/

22voto

Jiri Points 5589

Si je comprends bien, vous souhaitez supprimer les zéros de fin de la chaîne que vous avez obtenus via toFixed() . C'est une opération de chaîne pure:

 var x = 1.1230000;
var y = x.toFixed(15).replace(/0+$/, "");  // ==> 1.123
 

13voto

kennebec Points 33886

Number(n.toFixed(15)) or +(n.toFixed(15)) convertira la chaîne décimale de 15 positions en un nombre, en supprimant les zéros de fin.

4voto

Murplyx Points 455

Mmmm, une réponse un peu différente, pour le navigateur croisé aussi:

 function round(x, n) {
    return Math.round(x * Math.pow(10, n)) / Math.pow(10, n)
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X