Tell us what’s happening:
//SOLUTION FOR JS CASH REGISTER
I came across a rounding error when trying to complete this challenge. I get change that is less than 0.01$. I tried to get around it by rounding using num.toFixed(2) but that isn’t an accepted solution. Can you help me see where I went wrong?
**Your code so far**
function checkCashRegister(price, cash, cid) {
//an array of currency units
var denom = [100,20,10,5,1,0.25,0.1,0.05,0.01]
//difference b/n cash and price i.e. change
let dfc = cash-price;
console.log(dfc);
//cash in register written in array of currency units
let cidDenom = cid
.reverse()
.reduce((cdnm,itm) => {
cdnm.push(itm[1])
return cdnm
},[]);
console.log(cidDenom);
//change written in array of currency units
let dfcDenom = denom
.reduce((ddnm,itm,idx)=> {
if (parseInt(dfc/itm) > 0) {
parseInt(dfc/itm)*denom[idx] > cidDenom[idx] ? (ddnm.push(cidDenom[idx]),dfc = dfc - cidDenom[idx]):
(ddnm.push(parseInt(dfc/itm)*denom[idx]),dfc = dfc - (parseInt(dfc/itm))*denom[idx]);
;
return ddnm;
}
ddnm.push(0)
return ddnm;
},[])
.reduce((fin,itm,idx) => { //fixing a rounding error that I don't know how else to fix
if (idx == 8 && dfc < 1)
{itm += dfc;
itm = itm.toFixed(2)
dfc = 0;}
fin.push(itm);
return fin;
},[]);
console.log(dfcDenom);
//subtract change from cid
cidDenom = cidDenom.reduce((cdnm,itm,idx) => {
cdnm.push(itm-dfcDenom[idx])
cid[idx][1] = cdnm[idx];
return cdnm;
},[]);
//reducing dfcDenom to the change array required
dfcDenom = dfcDenom
.reduce((dwdnm,itm,idx) => {
dwdnm.push([cid[idx][0],itm])
return dwdnm
},[])
.reverse();
//create the change var to return
var change = {status: '', change: []};
console.log(dfc)
//define conditions for change
dfc > 0 ? (change.status = 'INSUFFICENT_FUNDS' , change.change = []) : cidDenom.every(x => x == 0) ? (change.status = 'CLOSED' , change.change = dfcDenom) : (change.status = 'OPEN' , change.change = dfcDenom.filter(x => x[1] !== 0));
console.log(change);
return change;
}
checkCashRegister(19.5, 20, [["PENNY", 0.5], ["NICKEL", 0], ["DIME", 0], ["QUARTER", 0], ["ONE", 0], ["FIVE", 0], ["TEN", 0], ["TWENTY", 0], ["ONE HUNDRED", 0]]);
**Your browser information:**
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36
Challenge: Cash Register
Link to the challenge: