en JavaScript, la forma típica de redondear un número a N posiciones decimales es algo como:
function roundNumber(num, dec) {
return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
}
Sin embargo, este enfoque se redondeará a un máximo de N lugares decimales, mientras que yo siempre quiero redondear a N lugares decimales. Por ejemplo, "2.0" se redondearía a "2".
¿Algunas ideas?
toFixed()
( developer.mozilla.org/En/Core_JavaScript_1.5_Reference/… ), pero tiene errores en IE: stackoverflow.com/questions/661562/… ; tendrás que escribir tu propia versión ...Respuestas:
Eso no es un problema de redondeo, es un problema de visualización. Un número no contiene información sobre dígitos significativos; el valor 2 es igual a 2.0000000000000. Es cuando convierte el valor redondeado en una cadena que hace que muestre una cierta cantidad de dígitos.
Puede agregar ceros después del número, algo como:
(Tenga en cuenta que esto supone que la configuración regional del cliente usa un punto como separador decimal, el código necesita más trabajo para funcionar para otras configuraciones).
fuente
toFixed()
para rellenar decimales al final, después de redondear?1.02449999998.toFixed(4)
regresa correctamente1.0245
.Creo que hay un enfoque más simple para todos aquí, y es el método
Number.toFixed()
ya implementado en JavaScript.simplemente escribe:
etc ...
fuente
toFixed()
devuelve una cadena.Encontre un camino. Este es el código de Christoph con una solución:
Lea los detalles de la repetición de un carácter usando un constructor de matriz aquí si tiene curiosidad por saber por qué agregué el "+ 1".
fuente
Siempre hay una mejor manera de hacer las cosas.
Me gustaría obtener una precisión de cuatro dígitos: 51,94
solo haz:
el resultado será: 51,94
fuente
Método de redondeo similar a PHP
El siguiente código se puede usar para agregar su propia versión de Math.round a su propio espacio de nombres que toma un parámetro de precisión. A diferencia del redondeo decimal en el ejemplo anterior, este no realiza conversión hacia y desde cadenas, y el parámetro de precisión funciona de la misma manera que PHP y Excel, por lo que un 1 positivo se redondearía a 1 lugar decimal y -1 se redondearía a las decenas.
de la referencia de desarrollador de Mozilla para Math.round ()
fuente
Con suerte, código de trabajo (no hice muchas pruebas):
fuente
Creo que la siguiente función puede ayudar
uso:
roundOff(600.23458,2);
volverá600.23
fuente
Esto funciona para redondear a N dígitos (si solo desea truncar a N dígitos, elimine la llamada Math.round y use la Math.trunc):
Tuve que recurrir a esa lógica en Java en el pasado cuando estaba creando componentes de E-Slate de manipulación de datos . Eso es porque descubrí que agregando 0.1 muchas veces a 0 terminaría con una parte decimal inesperadamente larga (esto se debe a la aritmética de punto flotante).
Un comentario de usuario en Número de formato para mostrar siempre 2 lugares decimales llama a esta técnica escalado.
Algunos mencionan que hay casos que no se redondean como se esperaba y en http://www.jacklmoore.com/notes/rounding-in-javascript/ esto se sugiere en su lugar:
fuente
Si realmente no le importa el redondeo, simplemente agregue un toFixed (x) y luego elimine los ceros finales y el punto si es necesario. No es una solución rápida.
fuente
format(1.2, 5)
y lo conseguí1.2
, mientras esperaba1.20000
.