web-dev-qa-db-fra.com

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

Je suis nouveau dans JavaScript et je viens de découvrir toFixed() et toPrecision() pour arrondir les nombres. Cependant, je ne peux pas comprendre quelle est la différence entre les deux.

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

112
Jessica

toFixed(n) fournit n longueur après le point décimal; toPrecision(x) fournit x longueur totale.

Réf à w3schools: toFixed et toPrecision

[~ # ~] éditez [~ # ~] :
J'ai appris il y a quelque temps que w3schools n'est pas exactement la meilleure source, mais j'ai oublié cette réponse jusqu'à ce que je voie le commentaire "enthousiaste" de kzh. Voici des références supplémentaires de Mozilla Doc Center pour toFixed() et pour toPrecision() . Heureusement pour nous tous, MDC et w3schools sont d'accord dans ce cas.

Pour être complet, je dois mentionner que toFixed() est équivalent à toFixed(0) et toPrecision() renvoie simplement le numéro d'origine sans mise en forme.

122
Pops

Je crois que le premier vous donne un nombre fixe de décimales, tandis que le dernier vous donne un nombre fixe de chiffres significatifs.

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

De plus, 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 nouveau sur JavaScript, je peux fortement recommander le livre " JavaScript: The Good Parts " de Douglas Crockford.

55
Tom

Je pense qu'il vaut mieux répondre par un exemple.

Disons que vous disposez des données suivantes:

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

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

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

The price of Really Nice Pen is $150.00

Cela semble bon, vous pourriez donc penser que cela fonctionnera également 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 bon. Nous pouvons résoudre ce problème en modifiant le nombre de chiffres significatifs pour chaque produit, mais si nous parcourons la gamme de produits, cela pourrait être délicat. Utilisons à la place toFixed:

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 aucun travail de devinette et aucun arrondi.

9
David Kennedy

Les exemples parlent clairement:

var A = 123.456789;

A.toFixed()      // 123
A.toFixed(0)     // 123
A.toFixed(1)     // 123.5
A.toFixed(2)     // 123.46
A.toFixed(3)     // 123.457
A.toFixed(4)     // 123.4568
A.toFixed(5)     // 123.45679
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
A.toPrecision(5)     // 123.46
A.toPrecision(6)     // 123.457
A.toPrecision(7)     // 123.4568
A.toPrecision(8)     // 123.45679
A.toPrecision(9)     // 123.456789
A.toPrecision(10)    // 123.4567890
A.toPrecision(11)    // 123.45678900
7
bob

Juste:

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

49.99.toPrecision(5)
// → "49.990"
6
Alexander Mextner

Dans certaines circonstances, toPrecision() renverra une notation exponentielle, tandis que toFixed() ne le fera pas.

4
Robusto

Par exemple, nous considérons la variable a comme, var a = 123.45 a.toPrecision (6) La sortie est 123.450 a.toFixed (6) La sortie est comme 123.450000 // 6 chiffres après le point décimal