es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Node.js y redondeo, debería ser tan difícil…?

Sé que esto se ha preguntado muchas veces antes, y hemos llegado a una solución para redondear cantidades (moneda) con dos decimales como:

const myCurrencyAmount = Number(Math.round(totalAmount + ‘e’ + 2) + ‘e-‘ + 2)

Sin embargo, ahora estamos muy cerca del año 2022 y Elon Musk está a punto de enviar personas a Marte (bueno, primero a la luna, pero…) así que seguramente debe haber una mejor manera de redondear (¡de manera segura!) en Node.js hoy en día… ???

La solución anterior ha estado funcionando bien durante algún tiempo (años) pero en cuanto quieras empezar a sumar o hacer cálculos usando dos decimales (como en las facturas, por ejemplo), rápidamente se vuelve arduo mantener el redondeo de todos los números, todo el tiempo.

Porque en Node.js, por supuesto, si redondeas un número una vez, a dos decimales, no va a recordar eso y volverá a usar su punto flotante la siguiente vez que quieras leer la variable, arruinando tus cálculos de nuevo…

Y para aquellos que piensan que simplemente deberían usar .toFixed(2), puedo decirles que el mundo de los flotantes les traerá algún dolor tarde o temprano… o, mientras tanto, disfruten de estos lindos ejemplos:

const num = 35.855;
console.log(num.toFixed(2));
// REGISTROS: 35.85

const num2 = 1.005;
console.log(num2.toFixed(2));
// REGISTROS: 1.00

Luego imaginen resumir unas cuantas miles de líneas de factura con miles en cantidad y vean cuánto desvío producen esos errores de redondeo…

Por favor, tenga en cuenta que no estoy preguntando sobre puntos flotantes (ya que los entiendo), simplemente estoy buscando una solución con menos caracteres para escribir…

Tags:  ,

Answer

  1. Avatar for davy.ai

    Afortunadamente, hay una mejor manera de redondear números en Node.js. Puede usar el método Math.round() para redondear números al entero más cercano. También puede usar el método Number.prototype.toFixed() para redondear números a un número específico de decimales. Por ejemplo:

    const num = 35.855;
    console.log(Math.round(num));
    // LOGS: 36
    
    console.log(num.toFixed(2));
    // LOGS: 35.85
    

    Usando estos métodos, puede redondear números en Node.js de forma segura sin preocuparse por los errores de punto flotante.

Comments are closed.