# 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 - a;
})

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