2010-07-26 42 views
83

Sono nuovo di JavaScript e ho appena scoperto toFixed() e toPrecision() per arrotondare i numeri. Tuttavia, non riesco a capire quale sia la differenza tra i due.Differenza tra toFixed() e toPrecision()?

Qual è la differenza tra number.toFixed() e number.toPrecision()?

risposta

104

toFixed(n) fornisce la lunghezza n dopo il punto decimale; toPrecision(x) fornisce la lunghezza totale di x.

Rif a w3schools: toFixed e toPrecision

EDIT:
ho imparato un po 'indietro che w3schools non è esattamente la migliore fonte, ma ho dimenticato di questa risposta fino a quando ho visto KZH di, uh , commento "entusiasta". Ecco ulteriori informazioni su Mozilla Doc Center for toFixed() e for toPrecision(). Fortunatamente per tutti noi, MDC e w3schools sono d'accordo gli uni con gli altri in questo caso.

Per completezza, vorrei ricordare che toFixed() è equivalente a toFixed(0) e toPrecision() solo restituisce il numero originale senza formattazione.

+9

Bah, ho postato questo nel mese di luglio 2010, e non ho imparato nulla su w3fools fino a quest'anno. Mentre gli sciocchi hanno ragione su alcune cose, non tutto sulle scuole è sbagliato. Grazie per aver segnalato che devo aggiornare questo post, però; lo farò tra un po '. – Pops

+12

'toPrecision (x)' non "fornisce' x' lunghezza totale ", formatta su un numero di cifre significative date. Ad esempio, '0.0000022.toPrecisione (1)' restituisce '0.000002'. –

+4

Ho appena visitato w3fools e non ero affatto convinto. Non vedo nemmeno discussioni. Tutto quello che vedo è una pubblicità per altri due siti. –

50

Credo che il primo fornisca un numero fisso di cifre decimali, mentre il secondo fornisce un numero fisso di cifre significative.

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

Inoltre, toPrecision produrrà scientific notation se ci sono più cifre intere del numero della precisione specificata.

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

EDIT: Oh, e se siete nuovi a JavaScript, consiglio vivamente il libro "JavaScript: The Good Parts" di Douglas Crockford.

4

In determinate circostanze, toPrecision() restituirà la notazione esponenziale, mentre toFixed() no.

+0

In realtà, 'toExponential()' è una [funzione separata] (http://www.w3schools.com/jsref/jsref_toexponential.asp). – Pops

+3

@Lord Torgamus: Secondo la mia copia di * Javascript: The Definitive Guide *, toPrecision (precision) userà la notazione in virgola fissa se l'* precision * arg è abbastanza grande da includere tutte le cifre della parte intera del numero. Altrimenti, viene utilizzata la notazione esponenziale. – Robusto

8

Penso che sia meglio rispondere con un esempio.

Diciamo che avere i seguenti dati:

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

Si desidera visualizzare ciascuno di questi prodotti con il titolo e prezzo formattato. Proviamo ad usare toPrecision prima:

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

The price of Really Nice Pen is $150.00 

sembra buono, per cui si potrebbe pensare che questo funzionerà per gli altri prodotti, nonché:

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 

non così buono. Possiamo risolvere questo problema modificando il numero di cifre significative per ciascun prodotto, ma se stiamo ripetendo la gamma di prodotti che potrebbero essere complicati.Usiamo toFixed invece:

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 

Questo produce quello che vi aspettavate. Non è previsto alcun lavoro di supposizione e non vi è alcun arrotondamento.

6

Just:

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

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

Ad esempio, consideriamo la variabile a come, var a = 123.45 a.toPrecision (6) L'uscita è 123,450 a.toFixed (6) L'uscita è come 123.45000000

0

Esempi parlano chiaro:

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