web-dev-qa-db-fra.com

Arrondir les nombres à 2 chiffres après la virgule

Je n'ai aucune idée comment faire ça? J'ajoute des nombres de virgule, le résultat est bien sûr toujours un nombre avec beaucoup trop de chiffres après la virgule. n'importe qui?

66

EDIT 2 :

Utilisez la méthode Number de l'objet toFixed comme ceci:

var num = Number(0.005) // The Number() only visualizes the type and is not needed
var roundedString = num.toFixed(2);
var rounded = Number(roudedString); // toFixed() returns a string (often suitable for printing already)

Il arrondit 42,0054321 à 42,01

Il arrondit 0,005 à 0,01

Il arrondit de -0,005 à -0,01 (la valeur absolue augmente donc lorsque l'on arrondit à la limite de 0,5)

exemple jsFiddle

81
Jacob Relkin

PDATE: Gardez à l'esprit qu'au moment où la réponse a été écrite en 2010, la fonction ci-dessous, toFixed (), fonctionnait légèrement différemment. toFixed () semble arrondir maintenant, mais pas de manière strictement mathématique. Alors soyez prudent avec elle. Faites vos tests ... La méthode décrite ci-dessous va bien arrondir, comme le mathématicien s'y attendrait.

  • toFixed() - la méthode convertit un nombre en chaîne en conservant un nombre spécifié de décimales. En fait, il n’arrondit pas un nombre, il le tronque.
  • Math.round(n) - arrondit un nombre à l'entier le plus proche. En tournant ainsi:

0,5 -> 1; 0,05 -> 0

donc, si vous voulez arrondir, dites le nombre 0.55555, uniquement à la deuxième décimale; vous pouvez faire ce qui suit (c'est un concept pas à pas):

  • 0.55555 * 100 = 55.555
  • Math.Round(55.555) -> 56.000
  • 56.000 / 100 = 0.56000
  • (0.56000).toFixed(2) -> 0.56

et voici le code:

(Math.round(number * 100)/100).toFixed(2);
92
Andrei

Cela a fonctionné pour moi:

var new_number = float.toFixed(2);

Exemple:

var my_float = 0.6666

my_float.toFixed(3) # => 0.667
52
Raivo

Les réponses précédentes ont oublié de saisir à nouveau la sortie sous forme de nombre. Il y a plusieurs façons de le faire, selon vos goûts.

+my_float.toFixed(2)

Number(my_float.toFixed(2))

parseFloat(my_float.toFixed(2))
11
Romain Vergnory

Ce n’est pas vraiment convivial pour le processeur, mais:

Math.round(number*100)/100

fonctionne comme prévu.

3
Tu4n3r

Bien que nous ayons beaucoup de réponses ici avec beaucoup de suggestions utiles, chacune d’elles manque encore quelques étapes.
Voici donc une solution complète regroupée dans une petite fonction:

function roundToTwoDigitsAfterComma(floatNumber) {
    return parseFloat((Math.round(floatNumber * 100) / 100).toFixed(2));
}

Juste au cas où vous êtes intéressé comment cela fonctionne:

  1. Multiple avec 100 et ensuite faire le tour pour garder la précision de 2 chiffres après la virgule
  2. Divisez à nouveau en 100 et utilisez toFixed(2) pour conserver 2 chiffres après la virgule et jetez les autres parties inutiles.
  3. Reconvertissez-le en float en utilisant parseFloat() fonction en tant que toFixed(2) renvoie chaîne à la place

Remarque: Si vous conservez les deux derniers chiffres après une virgule pour avoir utilisé des valeurs monétaires et effectuer des calculs financiers conserver l'esprit que c'est pas une bonne idée et vous feriez mieux d'utiliser des valeurs entières à la place.

3
Just Shadow

utilisez le code ci-dessous.

alert(+(Math.round(number + "e+2")  + "e-2"));
1
Phoenix

J'utilise ceci:

function round(value, precision) {

        if(precision == 0)
                return Math.round(value);       

        exp = 1;
        for(i=0;i<precision;i++)
                exp *= 10;

        return Math.round(value*exp)/exp;
}
0
Gehtdich Nichtsan