Me gustaría formatear mis números para que siempre muestren 2 decimales, redondeando donde corresponda.
Ejemplos:
number display
------ -------
1 1.00
1.341 1.34
1.345 1.35
He estado usando esto:
parseFloat(num).toFixed(2);
Pero se muestra 1
como 1
, en lugar de 1.00
.
Respuestas:
Demo en vivo
Mostrar fragmento de código
Tenga en cuenta que se redondeará a 2 decimales, por lo que la entrada
1.346
volverá1.35
.fuente
1
mostrarse como1.00
, y1.341
mostrarse como1.34
.(+num).toFixed(2)
. Incluso conserva el error de redondeo en el original, vea la respuesta de Nate .Mostrar fragmento de código
fuente
1.34
expresiónNumber(1.345).toFixed(2)
.1.345
es un ejemplo de un número que no se puede almacenar exactamente en coma flotante, por lo que creo que la razón por la que no se redondea como se espera es que en realidad se almacena como un número ligeramente menos de 1.345 y se redondea hacia abajo. Si prueba en su lugar con,(1.34500001).toFixed(2)
entonces verá que se redondea correctamente a1.35
Esta respuesta fallará si
value = 1.005
.Como una mejor solución, el problema de redondeo se puede evitar utilizando números representados en notación exponencial:
Código más limpio como lo sugiere @Kon, y el autor original:
Puede agregar
toFixed()
al final para retener el punto decimal, por ejemplo:1.00
pero tenga en cuenta que volverá como una cadena.Crédito: redondeando decimales en JavaScript
fuente
toFixed
tiene ese problema de redondeo. Su respuesta debe ser la aceptada.Number(Math.round(parseFloat(value + 'e' + decimalPlaces)) + 'e-' + decimalPlaces)
fuente
toPrecision
solo formatea el número a un número específico de lugares decimales, simplemente omite los lugares redundantes, pero no los redondea . Esto también podría ser muy útil, por supuesto, pero es importante entender la diferencia.(20.55).toPrecision(3) "20.6"
toFixed
:const formattedVal = Number(val.toFixed(2));
No usetoPrecision
, ya que cuenta los números no decimales cuando usa el parámetro de precisión.Para el redondeo más preciso, cree esta función:
y úsalo para redondear a 2 decimales:
Gracias a Razu , este artículo y la referencia de Math.round de MDN .
fuente
Para navegadores modernos, use
toLocaleString
:Especifique una etiqueta de configuración regional como primer parámetro para controlar el separador decimal . Para un punto, use, por ejemplo, la configuración regional de inglés de EE. UU .:
lo que da:
La mayoría de los países de Europa usan una coma como separador decimal, por lo que si, por ejemplo, usa la configuración regional sueca / sueca:
dará:
fuente
La respuesta más simple:
Ejemplo: http://jsfiddle.net/E2XU7/
fuente
toFixed
ya se sugirió en stackoverflow.com/a/13292833/218196 . ¿Qué información adicional proporciona su pregunta?toFixed
a un número.Una solución mucho más genérica para redondear a N lugares
fuente
roundN(-3.4028230607370965e+38,2)
regresa en"-3.4028230607370965e+38"
lugar del esperado 0.00https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat
fuente
Si ya está usando jQuery, puede mirar usando el formato de número jQuery complemento .
El complemento puede devolver números formateados como una cadena, puede establecer separadores decimales y de miles, y puede elegir el número de decimales para mostrar.
También puede obtener jQuery Number Format de GitHub .
fuente
¿Es esto lo que quieres decir?
fuente
Convierta un número en una cadena, manteniendo solo dos decimales:
El resultado de n será:
fuente
¿Buscas piso?
fuente
fuente
Aquí también hay una función genérica que puede formatear cualquier número de decimales:
fuente
Cuando se requiere un formato específico, debe escribir su propia rutina o utilizar una función de biblioteca que haga lo que necesita. La funcionalidad básica de ECMAScript suele ser insuficiente para mostrar números formateados.
Aquí encontrará una explicación detallada del redondeo y el formato: http://www.merlyn.demon.co.uk/js-round.htm#RiJComo regla general, el redondeo y el formato solo deben realizarse como un último paso antes de la salida. Hacerlo antes puede introducir errores inesperadamente grandes y destruir el formato.
fuente
fuente
Simplemente encuentre este hilo más largo, a continuación está mi solución:
Avísame si alguien puede hacer un agujero
fuente
Mostrar fragmento de código
fuente
parseFloat(num.toFixed(2))
No nos estás dando la imagen completa.
javascript:alert(parseFloat(1).toFixed(2))
muestra 1.00 en mi navegador cuando lo pego en la barra de ubicación. Sin embargo, si le haces algo después, se revertirá.fuente
fuente
Tuve que decidir entre las conversiones parseFloat () y Number () antes de poder hacer la llamada a toFixed (). Aquí hay un ejemplo de un número que formatea la entrada del usuario después de la captura.
HTML:
Controlador de eventos:
El código anterior dará como resultado la excepción TypeError. Tenga en cuenta que aunque el tipo de entrada html es "número", la entrada del usuario es en realidad un tipo de datos de "cadena". Sin embargo, la función toFixed () solo se puede invocar en un objeto que es un Número.
Mi código final se vería de la siguiente manera:
La razón por la que prefiero emitir con Number () vs. parseFloat () es porque no tengo que realizar una validación adicional ni para una cadena de entrada vacía, ni para el valor NaN. La función Number () manejaría automáticamente una cadena vacía y la convertiría a cero.
fuente
Si me gusta:
Redondea el número con 2 puntos decimales, luego asegúrate de analizarlo
parseFloat()
para devolver Número, no Cadena, a menos que no te importe si es Cadena o Número.fuente
parseFloat("1.00") // 1
Extender objeto matemático con método de precisión
fuente
parseInt(number * 100) / 100;
trabajó para mi.fuente
Aquí hay otra solución para redondear solo usando piso, es decir, asegurarse de que la cantidad calculada no sea mayor que la cantidad original (a veces necesaria para las transacciones):
fuente
Puedes probar este código:
fuente
Pruebe el siguiente código:
fuente
fuente
Así es como resuelvo mi problema:
fuente