0

I'm manipulating a lot of numbers in my application. For this particular case, here is what I do : I retrieve two lists of numbers, I do an average for each of these list, then I substract the two average. To avoid average like 3.333333333333 I use .toFixed(3) on my results.

Here is what it looks like :

// I found this function somewhere on Stackoverflow
Array.prototype.average = function() {
  if(this.length == 0){
    return 0;
  }
  else{
    return this.reduce(function (p, c) {
      return p + c;
    }) / this.length;
  }
};

sumHigh = [ 10.965, 10.889, 10.659, 10.69, 10.599 ]
sumLow = [ 4.807, 3.065, 2.668, 2.906, 3.606, 4.074, 4.153 ]

// Ok normal
console.log(sumHigh.average()) // 10.760399999999999
console.log(sumLow.average()) // 3.6112857142857138

// Ok normal
console.log(sumHigh.average().toFixed(3)) // "10.760"  Does the ".." has anything to do with my problem ?
console.log(sumLow.average().toFixed(3)) // "3.611"

// So here I have my two average values with no more than 3 numbers after the comma but it is not taken into account when substracting these two numbers...

// Not Ok, why 10.760 - 3.611 = 7.148999999999999 ?
console.log(sumHigh.average().toFixed(3) - sumLow.average().toFixed(3)) // 7.148999999999999
console.log(parseFloat(sumHigh.average().toFixed(3)) - parseFloat(sumLow.average().toFixed(3))) // 7.148999999999999

// Just as an example, this is working
console.log(parseFloat(sumHigh.average().toFixed(3)) + parseFloat(sumLow.average().toFixed(3))) // 14.371
console.log(parseFloat(sumHigh.average()) + parseFloat(sumLow.average())) // 14.371685714285713

Can someone explain this behaviour? Why substraction is not working while addition is?


Ok I know I can solve my problem with :

console.log((sumHigh.average() - sumLow.average()).toFixed(3)) // "7.149"

But that doesn't explain this behaviour.

Thanks

ZazOufUmI
  • 3,212
  • 6
  • 37
  • 67

0 Answers0