2010-07-26 15 views
83

Soy nuevo en JavaScript y acabo de descubrir toFixed() y toPrecision() para redondear los números. Sin embargo, no puedo entender cuál es la diferencia entre los dos.Diferencia entre toFixed() y toPrecision()?

¿Cuál es la diferencia entre number.toFixed() y number.toPrecision()?

Respuesta

104

toFixed(n) proporciona n longitud después del punto decimal; toPrecision(x) proporciona x longitud total.

Ref al w3schools: toFixed y toPrecision

EDITAR:
aprendí hace un tiempo que w3schools no es exactamente la mejor fuente, pero se olvidó de esta respuesta hasta que vi de kzh, uh , comentario "entusiasta". Aquí hay referencias adicionales de Mozilla Doc Center for toFixed() y for toPrecision(). Afortunadamente para todos nosotros, MDC y w3schools están de acuerdo en este caso.

Para completar, debería mencionar que toFixed() es equivalente a toFixed(0) y toPrecision() simplemente devuelve el número original sin formato.

+9

Bah, he publicado en julio de este 2010, y no aprendí sobre w3fools hasta este año. Si bien los tontos tienen razón sobre algunas cosas, no todo en las escuelas es incorrecto. Gracias por señalar que necesito actualizar esta publicación; lo hará en un momento. – Pops

+12

'toPrecision (x)' no proporciona 'x' longitud total', formatea una cantidad de dígitos significativos dados. Por ejemplo, '0.0000022.toPrecision (1)' devolvería '0.000002'. –

+4

Acabo de visitar w3fools y no estaba convencido en absoluto. Ni siquiera veo ningún argumento. Todo lo que veo es un anuncio de otros dos sitios. –

50

Creo que el primero le da un número fijo de decimales, mientras que el último le da un número fijo de dígitos significativos.

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

Además, toPrecision rendirá scientific notation si hay más dígitos enteros en el número de la precisión especificada.

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

EDIT: Ah, y si usted es nuevo en JavaScript, que recomiendo encarecidamente el libro "JavaScript: The Good Parts" por Douglas Crockford.

4

En determinadas circunstancias, toPrecision() devolverá la notación exponencial, mientras que toFixed() no lo hará.

+0

En realidad, 'toExponential()' es una [función separada] (http://www.w3schools.com/jsref/jsref_toexponential.asp). – Pops

+3

@Lord Torgamus: según mi copia de * Javascript: The Definitive Guide *, toPrecision (precisión) usará notación de punto fijo si * precision * arg es lo suficientemente grande como para incluir todos los dígitos de la parte entera del número. De lo contrario, se utiliza la notación exponencial. – Robusto

8

Creo que esto se responde mejor con un ejemplo.

Digamos que usted tiene los siguientes datos:

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

Usted desea mostrar cada uno de estos productos con el título y el precio formateado. Vamos a intentarlo utilizando toPrecision primera:

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

The price of Really Nice Pen is $150.00 

Se ve bien, por lo que se podría pensar que esto funcionará para los otros productos también:

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 

No tan bueno. Podemos solucionar esto cambiando la cantidad de dígitos significativos para cada producto, pero si estamos iterando sobre la matriz de productos que podrían ser complicados.Vamos a usar toFixed lugar:

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 

Esto produce lo que se esperaba. No se trata de adivinar, y no hay redondeo.

6

Just:

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

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

Por ejemplo, se considera la variable a como, var a = 123,45 a.toPrecision (6) La salida es 123.450 a.toFixed (6) La salida es como 123.45000000

0

Ejemplos hable con claridad:

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