2010-07-26 8 views
83

Ich bin neu in JavaScript und entdeckte gerade und toPrecision() runden Zahlen. Ich kann jedoch nicht herausfinden, was der Unterschied zwischen den beiden ist.Unterschied zwischen toFixed() und toPrecision()?

Was ist der Unterschied zwischen number.toFixed() und number.toPrecision()?

Antwort

104

toFixed(n) bietet n Länge nach dem Komma; toPrecision(x) bietet x Gesamtlänge.

Ref bei w3schools: toFixed und toPrecision

EDIT:
lernte ich eine Weile zurück, dass w3schools ist nicht gerade die beste Quelle, aber ich habe vergessen, über diese Antwort, bis ich KZH die sah, uh "enthusiastischer" Kommentar. Hier sind zusätzliche Referenzen von Mozilla Doc Center for toFixed() und for toPrecision(). Zum Glück für uns alle stimmen MDC und w3schools in diesem Fall überein.

Der Vollständigkeit halber sollte ich erwähnen, dass toFixed() zu toFixed(0) entspricht und toPrecision() gibt nur die ursprüngliche Zahl ohne Formatierung.

+9

Bah, ich gepostet dies im Juli 2010, und ich habe erst in diesem Jahr von w3fools erfahren. Während Dummköpfe in einigen Dingen recht haben, ist nicht alles an Schulen falsch. Danke, dass du darauf hingewiesen hast, dass ich diesen Beitrag aktualisieren muss. werde es ein bisschen tun. – Pops

+12

'toPrecision (x)' liefert keine 'x' Gesamtlänge ', es wird auf eine Anzahl gegebener signifikanter Stellen formatiert. Zum Beispiel würde '0.0000022.toPrecision (1)' '0.000002' zurückgeben. –

+4

Ich besuchte gerade W3Fools und war überhaupt nicht überzeugt. Ich sehe nicht einmal einen Streit. Alles, was ich sehe, ist eine Werbung für zwei andere Seiten. –

50

Ich glaube, dass der erstere gibt Ihnen eine feste Anzahl von Dezimalstellen, während der letztere gibt Ihnen eine feste Anzahl von signifikanten Ziffern.

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

Außerdem wird toPrecisionscientific notation ergeben, wenn es mehr ganzzahlige Ziffern in der Anzahl als die angegebene Präzision sind.

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

EDIT: Ach ja, und wenn Sie JavaScript neu sind, kann ich das Buch "JavaScript: The Good Parts" von Douglas Crockford sehr empfehlen.

4

Unter bestimmten Umständen gibt toPrecision() Exponentialschreibweise zurück, während toFixed() dies nicht tut.

+0

Tatsächlich ist 'toExponential()' eine [separate Funktion] (http://www.w3schools.com/jsref/jsref_toexponential.asp). – Pops

+3

@Lord Torgamus: Laut meiner Kopie von * Javascript: The Definitive Guide * verwendet toPrecision (Genauigkeit) die Festkomma-Notation, wenn das Argument * precision * groß genug ist, um alle Ziffern des ganzzahligen Teils der Zahl zu enthalten. Andernfalls wird die Exponentialschreibweise verwendet. – Robusto

8

Ich denke, das ist am besten mit einem Beispiel beantwortet.

Angenommen, Sie haben die folgenden Daten haben:

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

Sie wollen mit dem Titel jedes dieser Produkte angezeigt und formatiert Preis. Lassen Sie uns versuchen, mit toPrecision zuerst:

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

The price of Really Nice Pen is $150.00 

Sieht gut aus, so könnte man denken, dies auch für die anderen Produkte funktionieren:

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 

Nicht so gut. Wir können dies beheben, indem wir die Anzahl der signifikanten Stellen für jedes Produkt ändern, aber wenn wir über das Array von Produkten iterieren, das schwierig sein könnte.Lassen Sie uns toFixed verwenden statt:

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 

Dies erzeugt, was Sie erwartet. Es gibt keine Ratenarbeit, und es gibt keine Rundung.

6

Gerade:

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

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

Zum Beispiel betrachten wir die Variable a wie var a = 123.45 a.toPrecision (6) Der Ausgang 123,450 a.toFixed (6) Der Ausgang ist wie 123.45000000

0

Beispiele deutlich sprechen:

var A = 123.456789; 

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()  // --- ERROR --- 
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