165 votes

Différence entre toFixed() et toPrecision() ?

Je suis novice en JavaScript et je viens de découvrir toFixed() y toPrecision() pour arrondir les chiffres. Cependant, je n'arrive pas à comprendre quelle est la différence entre les deux.

Quelle est la différence entre number.toFixed() y number.toPrecision() ?

154voto

Pops Points 10137

toFixed(n) fournit n de la longueur après la virgule; toPrecision(x) fournit x la longueur totale.

Ref à w3schools: toFixed et toPrecision

EDIT:
J'ai appris que w3schools n'est pas exactement la meilleure source, mais je l'ai oublié à propos de cette réponse jusqu'à ce que j'ai vu kzh, euh, "enthousiaste" de commentaires. Voici d'autres références à partir de Mozilla Doc Center pour toFixed() et pour toPrecision(). Heureusement pour nous tous, MDC et w3schools accord les uns avec les autres dans ce cas.

Pour être complet, je dois mentionner qu' toFixed() est équivalent à toFixed(0) et toPrecision() retourne le nombre d'origine sans aucun formatage.

12 votes

Bah, j'ai posté ceci en juillet 2010, et je n'ai appris l'existence de w3fools que cette année. Alors que fools a raison sur certaines choses, pas sur d'autres. tout sur les écoles est erronée. Merci de m'avoir fait remarquer que je devais mettre à jour cet article, ce que je vais faire dans un instant.

9 votes

Je viens de visiter w3fools et je n'ai pas été convaincu du tout. Je ne vois même pas d'argument. Tout ce que je vois, c'est une publicité pour deux autres sites.

73voto

Tom Points 2773

Je pense que le premier donne un nombre fixe de décimales, tandis que le second donne un nombre fixe de chiffres significatifs.

Math.PI.toFixed(2); // "3.14"
Math.PI.toPrecision(2); // "3.1"

En outre, toPrecision donnera notation scientifique s'il y a plus de chiffres entiers dans le nombre que la précision spécifiée.

(Math.PI * 10).toPrecision(2); // "31"
(Math.PI * 100).toPrecision(2); // "3.1e+2"

EDIT : Oh, et si vous êtes novice en JavaScript, je vous recommande vivement le livre " JavaScript : Les bons côtés " par Douglas Crockford.

0 votes

Cette réponse n'explique pas ce comportement : (0.004).toPrecision(3) //'0.000400' . Je doute que "vous donne un nombre fixe de chiffres significatifs" soit une explication appropriée.

1 votes

@DmitryKoroliov Je pense que cela explique cela. Dans votre exemple, le chiffre '4' est le premier chiffre significatif, donc lorsque vous demandez 3 chiffres significatifs, il doit en ajouter deux autres, qui dans ce cas sont tous deux des zéros.

34voto

bob Points 736

Les exemples parlent clairement :

var A = 123.456789;

A.toFixed()      // 123
A.toFixed(0)     // 123
A.toFixed(1)     // 123.5      round up last
A.toFixed(2)     // 123.46     round up last
A.toFixed(3)     // 123.457    round up last
A.toFixed(4)     // 123.4568   round up last
A.toFixed(5)     // 123.45679  round up last
A.toFixed(6)     // 123.456789
A.toFixed(7)     // 123.4567890
A.toFixed(8)     // 123.45678900
A.toFixed(9)     // 123.456789000
A.toFixed(10)    // 123.4567890000
A.toFixed(11)    // 123.45678900000

A.toPrecision()      // 123.456789 
A.toPrecision(0)     // --- ERROR --- 
A.toPrecision(1)     // 1e+2
A.toPrecision(2)     // 1.2e+2
A.toPrecision(3)     // 123
A.toPrecision(4)     // 123.5      round up last
A.toPrecision(5)     // 123.46     round up last
A.toPrecision(6)     // 123.457    round up last
A.toPrecision(7)     // 123.4568   round up last
A.toPrecision(8)     // 123.45679  round up last
A.toPrecision(9)     // 123.456789
A.toPrecision(10)    // 123.4567890
A.toPrecision(11)    // 123.45678900

11voto

Koveras Points 1169

Je pense que la meilleure réponse à cette question est un exemple.

Disons que vous avez les données suivantes :

var products = [
  {
    "title": "Really Nice Pen",
    "price": 150
  },
  {
    "title": "Golf Shirt",
    "price": 49.99
  },
  {
    "title": "My Car",
    "price": 1234.56
  }
]

Vous voulez afficher chacun de ces produits avec le titre et le prix formaté. Essayons d'utiliser toPrecision d'abord :

document.write("The price of " + products[0].title + " is $" + products[0].price.toPrecision(5));

The price of Really Nice Pen is $150.00

L'apparence est bonne, on peut donc penser que cela fonctionnera aussi pour les autres produits :

document.write("The price of " + products[1].title + " is $" + products[2].price.toPrecision(5));
document.write("The price of " + products[2].title + " is $" + products[2].price.toPrecision(5));

The price of Golf Shirt is $49.990
The price of My Car is $1234.6

Pas si bien. Nous pouvons résoudre ce problème en changeant le nombre de chiffres significatifs pour chaque produit, mais si nous itérons sur le tableau des produits, cela peut être délicat. Utilisons toFixed à la place :

document.write("The price of " + products[0].title + " is $" + products[0].price.toFixed(2));
document.write("The price of " + products[1].title + " is $" + products[2].price.toFixed(2));
document.write("The price of " + products[2].title + " is $" + products[2].price.toFixed(2));

The price of Really Nice Pen is $150.00
The price of Golf Shirt is $49.99
The price of My Car is $1234.56

Cela produit ce que vous attendiez. Il n'y a pas de travail de devinette, et il n'y a pas d'arrondi.

6voto

Juste :

49.99.toFixed(5)
// → "49.99000"

49.99.toPrecision(5)
// → "49.990"

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