0

Tengo problemas al sumar decimales en un array.

Haciendolo de esta manera:

   var array = [2.74, 48.39, 71.45, 85, 38.39];
    
    var sum  = 0;
    //console.log(array.length);
    for (var i = 0; i < array.length; i++) {
      console.log(array[i]);
      sum += array[i];
    }
    console.log(sum);

o de esta:

var array = [2.74, 48.39, 71.45, 85, 38.39];
let sum = array.map(c => parseFloat(c)).reduce((a, b) => a + b, 0);
console.log(sum)

Devuelve 245.97000000000003 pero debería ser 245.97

como deberia sumar decimales de un array?

JackNavaRow
  • 6,836
  • 5
  • 22
  • 49
Carmu
  • 3
  • 3
  • 2
    Eso es un [problema general de números de punto flotante](http://puntoflotante.org/errors/rounding/). Para que necesitas la precisión exacta? – Tao Feb 20 '18 at 13:31
  • Claro, no entiendo porque agrega esos decimales al sumar... – Carmu Feb 20 '18 at 14:52
  • Te recomiendo leer [esta otra pregunta](https://es.stackoverflow.com/q/197/16597) – Marcos Feb 22 '18 at 13:29

2 Answers2

0

Haz uso de la función .toFixed(), en este caso puntual .toFixed(2) te dará el resultado 245.97.

La función .toFixed() formatea un número con un número específico de dígitos a la derecha del decimal.

El porque de esto, se explica aquí si quieres leerlo, considero que la explicación sale del tema, ya que es puramente como se trata el tipo float computacionalmente. PD: El articulo esta en ingles lamentablemente.

Federico Madoery
  • 2,858
  • 9
  • 19
-3

Has probado a darle formato a la salida con number_format($número, 2, '.', '');

Aquí tienes el manual de php

Killpe
  • 1,174
  • 1
  • 19
  • 34