Hi All!

I’m on the last problem of the data structures and algorithms cert, but I’m stuck on the math portion of the project! I’ve tried Math.round(), and I’ve also tried using (.100000000000000) for a penny and so on. I’ve read a few forums and they mentioned that this should work, but somehow I’m still getting inaccurate decimals.

Is anyone able to help me get precise decimals on this one? I’m not finished with the problem but I only have to make the return function after this. I’ve logged the customer’s change as well, so you can see what happens.

Would it be better to go another route? **Thank you!!**

```
function checkCashRegister(price, cash, cid) {
//Making currency amounts suitable for JS math
let penny = (Math.round(.01 * 100)/100); let nickel = (Math.round(.05 * 100)/100); let dime = (Math.round(.1 * 100)/100); let quarter = (Math.round(.25 * 100)/100); let one = (Math.round(1 * 100)/100); let five = (Math.round(5 * 100)/100); let ten = (Math.round(10 * 100)/100); let twenty = (Math.round(20 * 100)/100); let hundred = (Math.round(100 * 100)/100);
//Currency list to easily call in all functions
let currencyList = [ ["PENNY", penny], ["NICKEL", nickel], ["DIME", dime], ["QUARTER", quarter], ["ONE", one], ["FIVE", five], ["TEN", ten], ["TWENTY", twenty], ["ONE HUNDRED", hundred] ];
let storage = []; let remainder = cash - price;
//Create subtractor to make sure all change is accounted for
let subtractor = (Math.round(remainder * 100)/100);
let cashRemainder = cid; let drawerCash = 0;
let change = [ ["ONE HUNDRED", 0], ["TWENTY", 0], ["TEN", 0], ["FIVE", 0], ["ONE", 0], ["QUARTER", 0], ["DIME", 0], ["NICKEL", 0], ["PENNY", 0] ];
// check to see if remainder is bigger than a certain currency and if it is available in the drawer (check)
// if so then push that amount to the change array and subtract it from subtractor (check)
// also subtract that amount from the cid (check)
// then repeat this process by calling this function again
//Adding up the money in the drawer
for (let c = 0; c < cid.length; c++){
drawerCash += cid[c][1];
};
console.log((subtractor).toPrecision(17));
//Deciding whether to go through the currencyType function
function decider (num) {
while (subtractor >= 0){
currencyType(subtractor);
}
};
//Decide whether or not enough change left
for (let l = 0; l < 1; l++){
if (drawerCash > remainder){
decider(Math.round(remainder *100)/100);
} else if (drawerCash >= remainder) {
decider(Math.round(remainder *100)/100);
} else {
return {status: "INSUFFICIENT_FUNDS", change: []};
}
}
//Seeing what type of currency needs to be used, subtracting it from the cash left in the drawer and the money left to give, and adding it to the customer's change
function currencyType (num){
if (num >= 100 && currencyList[8][1] <= cashRemainder[8][1]){
change[0][1] += hundred;
subtractor = (subtractor - hundred);
cashRemainder[8][1] -= currencyList[8][1];
console.log(subtractor);
//changeDecider(subtractor);
} else if (num >= 20 && currencyList[7][1] <= cashRemainder[7][1]){
change[1][1] += twenty;
subtractor = (subtractor - twenty);
cashRemainder[7][1] -= currencyList[7][1];
console.log(subtractor);
//changeDecider(subtractor);
} else if (num >= 10 && currencyList[6][1] <= cashRemainder[6][1]){
change[2][1] += ten;
subtractor = (subtractor - ten);
cashRemainder[6][1] -= currencyList[6][1];
console.log(subtractor);
//changeDecider(subtractor);
} else if (num >= 5 && currencyList[5][1] <= cashRemainder[5][1]){
change[3][1] += five;
subtractor = (subtractor - five);
cashRemainder[5][1] -= currencyList[5][1];
console.log(subtractor);
//changeDecider(subtractor);
} else if (num >= 1 && currencyList[4][1] <= cashRemainder[4][1]){
change[4][1] += one;
subtractor = (subtractor - one);
cashRemainder[4][1] -= currencyList[4][1];
console.log(subtractor);
//changeDecider(subtractor);
} else if (num >= .25 && currencyList[3][1] <= cashRemainder[3][1]){
change[5][1] += quarter;
subtractor = (subtractor - quarter);
cashRemainder[3][1] -= currencyList[3][1];
console.log(subtractor);
//changeDecider(subtractor);
} else if (num >= .1 && currencyList[2][1] <= cashRemainder[2][1]){
change[6][1] += dime;
subtractor = (subtractor - dime);
cashRemainder[2][1] -= currencyList[2][1];
console.log(subtractor);
//changeDecider(subtractor);
} else if (num >= .05 && currencyList[1][1] <= cashRemainder[1][1]){
change[7][1] += nickel;
subtractor = (subtractor - nickel);
cashRemainder[1][1] -= currencyList[1][1];
console.log(subtractor);
//changeDecider(subtractor);
} else if (num >= .01 && currencyList[0][1] <= cashRemainder[0][1]){
change[8][1] += penny;
subtractor = (subtractor - penny);
cashRemainder[0][1] -= currencyList[0][1];
console.log(subtractor);
//changeDecider(subtractor);
}
};
console.log(change);
//round nums
}
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]]);
```