Hello,
I’m working through the final JavaScript challenge (Cash Register). I’ve written a function to count the change, and keep track of the change given in the format needed to pass the challenge.
The function seems to work in all cases, EXCEPT when it gets down to counting pennies. Sometimes when change gets down to .01, it never counts down the last penny, resulting in an infinite loop.
function checkCashRegister(price, cash, cid) {
let cidArr = cid;
let valuesArr = [.01, .05, .1, .25, 1, 5, 10, 20, 100];
let changeGiven = 0;
let changeGivenArr = [];
function countChange(change, x){
console.log(change)
changeGiven = 0;
while (change > 0){
if (valuesArr[x] > change){
return countChange(Math.round(change * 100) / 100, x -1)
} else if (valuesArr[x] <= change){
while (cidArr[x][1] > 0 && valuesArr[x] <= change){
change -= valuesArr[x]
cidArr[x][1] -= Math.round(valuesArr[x])
changeGiven += valuesArr[x]
}
changeGivenArr.push([cidArr[x][0], changeGiven])
return countChange(Math.round(change * 100) / 100, x - 1)
}
}
console.log(changeGivenArr)
return change;
}
console.log(countChange(.12, valuesArr.length -1))
}
checkCashRegister(19.5, 20, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100]]);
Returns:
[ [ 'DIME', 0.1 ], [ 'PENNY', 0.02 ] ]
0 // The correct amount
However, when passing in: values like .03, .04, .08, .09, .13, .18 etc… I get an infinite loop with .01 in the console.
Whats confusing to me is passing in values that require pennies like .01, .02, .12, .17 etc… returns the correct solution.
Can someone shed some light on what is going on here?