Javascript redondea a decimales

En nuestros ejemplos, utilizaremos dos de las constantes matemáticas más importantes para demostrar diferentes tipos de redondeo: Pi, que es la relación entre la circunferencia de un círculo y su diámetro, y e, que es la base de los logaritmos naturales y también se conoce como “número de Euler”. Ambos valores son propiedades del objeto Math, pero vamos a asignarlos a algunas variables para que sea más fácil tratarlos:

El primer método que veremos es Math.round. Esta es la opción más directa, y simplemente redondea cualquier número con una parte decimal al entero más cercano. Utiliza esta regla: si un número está exactamente a la mitad de dos enteros, se redondeará hacia arriba. Por ejemplo, 2,5 se redondeará a 3.

Math.round() es muy útil si quiere redondear un número al valor entero más cercano. Por ejemplo, si está calculando la puntuación media de tres pruebas, sumará las tres puntuaciones y las dividirá por tres. Esto podría no dar como resultado un número entero, por lo que utilizaría Math.round() para redondearlo al valor más cercano:

Js ronda a 2

Aquí viene Number.EPSILON. Ese número es la diferencia entre el 1 y el siguiente número existente en los números de punto flotante de doble precisión. Eso es todo: No hay ningún número entre 1 y 1 + Number.EPSILON.

Como se pide en los comentarios, aclaremos una cosa: añadir Number.EPSILON es relevante sólo cuando el valor a redondear es el resultado de una operación aritmética, ya que puede tragarse algún delta de error en coma flotante.

De hecho, en el código estoy usando ESPILON_RATE = 1 + 4 * Number.EPSILON y EPSILON_ZERO = 4 * Number.MIN_VALUE (cuatro veces el épsilon), porque quiero un comprobador de igualdad lo suficientemente flojo para acumular errores de punto flotante.

leer  Eliminar de un array javascript

Para determinar si una operación de redondeo implica un valor de punto medio, la función Round multiplica el valor original a redondear por 10 ** n, donde n es el número deseado de dígitos fraccionarios en el valor de retorno, y luego determina si la porción fraccionaria restante del valor es mayor o igual a .5. Esta “prueba exacta de igualdad” con valores de punto flotante es problemática debido a los problemas del formato de punto flotante con la representación binaria y la precisión. Esto significa que cualquier porción fraccional de un número que sea ligeramente inferior a .5 (debido a la pérdida de precisión) no se redondeará hacia arriba.

Js redondea el número a 2 decimales

Redondear números con precisión decimal requiere un poco de cálculo y Math.round(). Opcionalmente podemos utilizar el método toFixed() que pertenece al prototipo Number. El tipo de salida de toFixed() es una cadena que necesita ser pasada a una función de nivel superior llamada parseFloat() para devolver un número. Desafortunadamente, esto parece ser muy lento.Math.round(3.14159 * 100) / 100 // 3.14

Vale la pena mencionar que el soporte del navegador para Math.trunc() no es muy bueno. Es parte de la nueva especificación ES2015 (sí, yo también prefiero ES6). Por suerte hay una forma de utilizarlo sin el soporte de ES6 (gracias a Johny que sugirió esta solución en los comentarios). Podemos utilizar los operadores de bit a bit para llevar a cabo esta tarea. Desgraciadamente también hay algunas restricciones. Todas las operaciones bitwise funcionan con enteros de 32 bits con signo. Su uso convierte un flotador en un entero. En la práctica significa que podemos trabajar con seguridad hasta 2^31-1 (2 147 483 647) que es mucho menos que Number.MAX_VALUE (1.7976931348623157e+308). Esto tampoco es una gran idea para los cálculos monetarios.3.14159 | 0; // 3

leer  Deshabilitar click derecho javascript

Js round up

En el fragmento de código anterior, hemos tomado un número largo de punto flotante como entrada y hemos añadido un número pequeño comparado con ese número de entrada. A continuación, utilizaremos el método Number.EPSILON para proporcionar el redondeo exacto del número.

Este método .toFixed() no genera salidas exactas en algunos casos. Hay muchos otros métodos mejores que éste. Si un número se redondea de 2,2, dará un resultado de 2,20. Si los usuarios introducen un número como 5.005 como entrada, devolverá 5.000 en lugar de 5.01.

En el ejemplo, hemos utilizado Math.round() con roundToTwo(num) para desplazar y convertir el número de entrada en dos decimales. La función personalizada se encarga de cada punto de esquina mientras redondea los decimales como 3.394792 se calcula bien por esta función.

Para redondear un número de punto flotante a dos decimales, los programadores pueden utilizar cualquiera de los métodos mencionados anteriormente para mejorar la legibilidad y el rendimiento de su código. Todos estos métodos son formas eficientes de redondear los valores de punto flotante.

Por avivcas