Soy nuevo en JavaScript y acabo de descubrir toFixed()
y toPrecision()
redondear números. Sin embargo, no puedo entender cuál es la diferencia entre los dos.
¿Cuál es la diferencia entre number.toFixed()
y number.toPrecision()
?
fuente
Soy nuevo en JavaScript y acabo de descubrir toFixed()
y toPrecision()
redondear números. Sin embargo, no puedo entender cuál es la diferencia entre los dos.
¿Cuál es la diferencia entre number.toFixed()
y number.toPrecision()
?
toFixed(n)
proporciona n
longitud después del punto decimal; toPrecision(x)
proporciona x
longitud total.
Ref. En w3schools: toFixed y toPrecision
EDITAR :
Hace un tiempo aprendí que w3schools no es exactamente la mejor fuente, pero olvidé esta respuesta hasta que vi el comentario "entusiasta" de kzh. Aquí hay referencias adicionales del Mozilla Doc Center paratoFixed()
y paratoPrecision()
. Afortunadamente para todos nosotros, MDC y w3schools están de acuerdo en este caso.
Para completar, debo mencionar que toFixed()
es equivalente toFixed(0)
y toPrecision()
solo devuelve el número original sin formato.
toPrecision(x)
no "proporcionax
la longitud total", se formatea a un número de dígitos significativos dados. Por ejemplo,0.0000022.toPrecision(1)
volvería0.000002
.toPrecision(x)
proporcionax
longitud total". no necesariamente se sostiene. Ejemplo de contador:0.00001234.toPrecision(3)
Creo que el primero te da un número fijo de decimales, mientras que el segundo te da un número fijo de dígitos significativos.
Además,
toPrecision
producirá notación científica si hay más dígitos enteros en el número que la precisión especificada.EDITAR: Ah, y si eres nuevo en JavaScript, puedo recomendar el libro " JavaScript: The Good Parts " de Douglas Crockford.
fuente
Los ejemplos hablan claramente:
fuente
Creo que esto se responde mejor con un ejemplo.
Digamos que tiene los siguientes datos:
Desea mostrar cada uno de estos productos con el título y el precio con formato. Intentemos usar
toPrecision
primero:Se ve bien, por lo que podría pensar que esto también funcionará para los otros productos:
No tan bien. Podemos arreglar esto cambiando la cantidad de dígitos significativos para cada producto, pero si estamos iterando sobre la variedad de productos, eso podría ser complicado. Usemos en su
toFixed
lugar:Esto produce lo que esperabas. No hay trabajo de adivinanzas involucrado, y no hay redondeo.
fuente
Sólo:
fuente
Bajo ciertas circunstancias,
toPrecision()
devolverá la notación exponencial, mientrastoFixed()
que no lo hará.fuente
toExponential()
es una función separada .a = 999999999999999934464;
,a.toFixed(0)
devuelve"1e+21"
. Quizás una respuesta más precisa sería que toFixed () no devuelve una notación exponencial a menos que toString () sí lo haga.Por ejemplo, consideramos la variable a como, var a = 123.45 a.toPrecision (6) La salida es 123.450 a.toFixed (6) La salida es como 123.450000 // 6 dígitos después del punto decimal
fuente
Ambas
toPrecision()
ytoFixed()
son funciones diseñadas para formatear un número antes de imprimirlo. Entonces ambos devuelvenString
valores.Hay una excepción Si utiliza estas funciones en un literal de número negativo , debido a la precedencia del operador, se devuelve un número. Lo que esto significa es que
toFixed()
otoPrecision()
devolverá una cadena primero, y luego el-
operador menos convertirá la cadena de nuevo a un Número como un valor negativo. Consulte a continuación para ver un ejemplo.toPrecision()
devuelve unaString
representación del objeto Número en notación de punto fijo o exponencial redondeada a dígitos significativos. Entonces, si especifica que desea una precisión de 1, devuelve el primer número significativo junto con la notación científica para indicar las potencias de 10 o los 0 anteriores antes de su punto decimal si el número significativo es <0.toFixed()
devuelve unaString
representación del objeto Number en notación de punto fijo, redondeado hacia arriba. Esta función solo se preocupa por los números de punto decimalMencioné anteriormente una excepción en la que el uso de estas funciones en literales de números negativos devolverá un número y no una cadena debido a la precedencia del operador. Aquí hay unos ejemplos:
Dato curioso: hay ceros con signo como se ve desde
-0.0456.toFixed(1)
Ver: ¿Son +0 y -0 iguales?
fuente