Help With Cash Register Challenge

Hello,

I’ve been working on this challenge for a while, and I took a break. I recently just came back and I’ve been working on it, but I have just been stuck. I was wondering if any of you guys can provide any help on getting me on the right track to providing my own solution?

So, in the code, I’ve been using a loop to continuously subtract to get the proper change, but it keeps giving me weird values. I’ve been trying to figure that out for the longest.

Here is My Code:

function checkCashRegister(price, cash, cid) {
  let changeCal = cash - price;
  let drawerSum = 0;    // calculates sum of money in drawer.
  let obj = {};
  obj.status = " ";
  obj.change = [];
  let sum = 0;

  /* Step 1: Iterate through 2d array */
  for(let i=0; i < cid.length; i++) {
      for(let j=0; j < cid[i].length; j++) {
        if(isNaN(cid[i][j]) === false) {
            drawerSum += cid[i][j]; // add up all the numbers
        }
        if(cid[i][j] === "PENNY") {
            cid[i][j] = 0.01;
        }
        if(cid[i][j] === "NICKEL") {
          cid[i][j] = 0.05;
        }
        if(cid[i][j] === "DIME") {
          cid[i][j] = 0.1;
        }
        if(cid[i][j] === "QUARTER") {
          cid[i][j] = 0.25;
        }
        if(cid[i][j] === "ONE") {
          cid[i][j] = 1;
        }
        if(cid[i][j] === "FIVE") {
          cid[i][j] = 5;
        }
        if(cid[i][j] === "TEN") {
          cid[i][j] = 10;
        }
        if(cid[i][j] === "TWENTY") {
          cid[i][j] = 20;
        }
        if(cid[i][j] === "ONE HUNDRED") {
          cid[i][j] = 100;
        }
      }
  }


  /* Create a new 2D array by ordering it */
  let cid2 = cid.sort(function(a, b) {
    return b[0] - a[0];
  })

loop1:
  for(let i=0; i < cid2.length; i++) {
    //loop2:
   // for(let j=0; j < cid2[i].length; j++) {
      if(changeCal < cid2[i][0]) {
        continue; // Skip the iteration
      }  else {  
            while(changeCal > 0) {
              changeCal -= cid2[i][0];
              sum += cid2[i][0];
              console.log(sum);
              if(sum >= cid2[i][1]) {
               changeCal -= cid2[i+1][0];
               //continue loop1;
               break;
              }
            }
            //console.log(sum);
            console.log(changeCal);
            }
     // }
    }

  if(drawerSum < changeCal) {
      obj.status = "INSUFFICIENT_FUNDS";
      obj.change = [];
  }  
   if(drawerSum === changeCal) {
      obj.status = "CLOSED";
      obj.change = cid;
  }

    
  return obj;
} 

All help is appreciated. Thanks!

You are encountering the so-called floating point error. Due to internal representation of the floating numbers, operations performed on such numbers can be imprecise. One of the typical example of it is following:

0.1 + 0.1 + 0.1 === 0.3

The result of this might be surprising exactly because of the floating point error.