166 votes

Comment formater un flottant en javascript ?

En JavaScript, lors de la conversion d'un flottant en chaîne de caractères, comment puis-je obtenir seulement 2 chiffres après la virgule ? Par exemple, 0,34 au lieu de 0,3445434.

349voto

Tim Büthe Points 21527

Il existe des fonctions permettant d'arrondir les chiffres. Par exemple :

var x = 5.0364342423;
print(x.toFixed(2));

imprimera 5.04.

EDIT : Violon

111voto

Christoph Points 64389

Soyez prudent lorsque vous utilisez toFixed() :

Premièrement, l'arrondi du nombre est effectué en utilisant la représentation binaire du nombre, ce qui peut entraîner un comportement inattendu. Par exemple

(0.595).toFixed(2) === '0.59'

au lieu de '0.6' .

Deuxièmement, il y a un bug d'IE avec toFixed() . Dans IE (au moins jusqu'à la version 7, je n'ai pas vérifié IE8), la règle suivante s'applique :

(0.9).toFixed(0) === '0'

Il peut être judicieux de suivre la suggestion de kkyy ou d'utiliser un fichier personnalisé toFixed() fonction, par exemple

function toFixed(value, precision) {
    var power = Math.pow(10, precision || 0);
    return String(Math.round(value * power) / power);
}

90voto

kkyy Points 5540
var result = Math.round(original*100)/100;

Les spécificités au cas où le code ne serait pas explicite.

edit : ...ou simplement utiliser [toFixed](http://www.pageresource.com/jscript/j%5Fa%5F03.htm) comme proposé par Tim Büthe . J'avais oublié celui-là, merci (et une upvote) pour le rappel :)

6voto

Ilya Birman Points 2996
var x = 0.3445434
x = Math.round (x*100) / 100 // this will make nice rounding

2voto

ArteQ Points 29

Il y a un problème avec toutes ces solutions qui circulent en utilisant des multiplicateurs. Les solutions de kkyy et de Christoph sont toutes deux fausses, malheureusement.

Veuillez tester votre code pour le nombre 551.175 avec 2 décimales - il arrondira à 551.17 alors qu'il devrait être 551.18 ! Mais si vous testez par ex. 451.175 il sera ok - 451.18. Il est donc difficile de repérer cette erreur au premier coup d'œil.

Le problème est avec la multiplication : essayez 551.175 * 100 = 55117.49999999999 (ups !)

Mon idée est donc de le traiter avec toFixed() avant d'utiliser Math.round() ;

function roundFix(number, precision)
{
    var multi = Math.pow(10, precision);
    return Math.round( (number * multi).toFixed(precision + 1) ) / multi;
}

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