Tell us what’s happening:
The final Calculation is altered by “0.01”. My final value in to loop fails to capture due to this alteration. Please suggest
Your code so far
function checkCashRegister(price, cash, cid) {
const fundStatus = {open:"OPEN",closed:"CLOSED",insufficient:"INSUFFICIENT_FUNDS"}
const CurrencyUnit = {
"PENNY": 0.01,
"NICKEL":0.05,
"DIME":0.1,
"QUARTER":0.25,
"ONE":1,
"FIVE":5,
"TEN":10,
"TWENTY":20,
"ONE HUNDRED":100
}
var change = (cash-price).toFixed(2);
const changeNeeded = change;
var totalCash = totalCashInDrawer(cid);
var changeObj = {status:"",change:[]}
console.log(change+":"+totalCash)
if(Number(change) > Number(totalCash)){
changeObj.status = fundStatus.insufficient;
changeObj.change = [];
}
if(Number(change) == Number(totalCash)){
changeObj.status = fundStatus.closed;
changeObj.change = cid;
}
if(Number(change) < Number(totalCash)){
let total = [];
for(let j=cid.length-1;j>=0;j--){
let count =0;let cu = cid[j][0];
while(change >= CurrencyUnit[cu] && cid[j][1]>0){
change -= CurrencyUnit[cu]
cid[j][1] -= CurrencyUnit[cu]
count++;
}
if(count*CurrencyUnit[cu]!=0){
total.push([cu,count*CurrencyUnit[cu]]);
}
}
let totalreturnSum = 0;
for(let i=0;i<total.length;i++){
totalreturnSum+= total[i][1];
}
console.log(change)
if(totalreturnSum != changeNeeded){
changeObj.status = fundStatus.insufficient;
changeObj.change = [];
}else if(total != ""){
changeObj.status = fundStatus.open;
changeObj.change = total;
}
}
return changeObj;
}
function totalCashInDrawer(cashInDrawer){
var total = 0;
for(let i=0;i<cashInDrawer.length;i++){
total+=cashInDrawer[i][1];
}
return total.toFixed(2);
}
console.log(checkCashRegister(3.26, 100, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100]]));
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.66
.
Challenge: Cash Register
Link to the challenge: