3

Buenas tardes. chicos tengo el siguiente problema. con una operación simple de suma me ocurre lo siguiente:

99.92+0.04
99.96000000000001

no se por que se añade ese 1 al final. Esto hace que los resultados de las operaciones no me den exactos.

Juan Pinzón
  • 9,007
  • 18
  • 48
  • 76

2 Answers2

1

Lo puedes hacer usando la función parseFloat y después limitando el número de decimales que vas a mostrar en tu resultado:

var suma = parseFloat('99.92') + parseFloat('0.04');
alert(suma.toFixed(2));

O podrías directamente limitar el número de caracteres a dos en el caso de que no quisieras tomarlos como Float y simplemente fuera para mostrarlos:

var suma = 99.92 + 0.04;
alert(suma.toFixed(2));

Esto sería para solucionar el "error". En caso de que quieras respuestas más detalladas sobre el por qué pasa esto te pongo una muy buena pregunta de Stackoverflow en inglés con respuestas muy completas: Is floating point math broken?

Francisco Romero
  • 16,194
  • 5
  • 30
  • 61
1

Intenta con la siguiente funcion, en mi caso fue la opcion que me ha funcionado:

Number.prototype.roundDecimal = function (d) {
    if (!d || d == 0 || d == null || typeof d === 'undefined') { d = 2; };
    num = this;
    num = num * Math.pow(10, d)
    num = Math.round(num)
    num = num / Math.pow(10, d)
    return num
}

Despues solamente usas la funcion algo asi:

var num = 99.92+0.04; 

num = num.roundDecimal() //Si no le pasas parametro toma 2 decimales despues del punto.

Esto me ha funcionado en una aplicacion de facturacion (manejo de decimales) que tengo actualmente en produccion.

Es una adaptacion de este codigo.

KikinRdz
  • 58
  • 7