este es un ejercicio de JavaScript que pueden encontrar en la siguiente pagina:
Este es mi codigo:
function checkCashRegister(price, cash, cid) {
debugger;
var toReturn = cash - price;
var cashArray = [0.01, 0.05, 0.1, 0.25, 1, 5, 10, 20, 100];
var counter = 0;
var total = 0;
var result = {
status: "",
change: [["ONE HUNDRED", 0], ["TWENTY", 0], ["TEN", 0], ["FIVE", 0], ["DOLLAR", 0], ["QUARTER", 0], ["DIME", 0], ["NICKEL", 0], ["PENNY", 0]]
}
total = cid.reduce(function(acc,val){
return (acc * 100 + val[1] * 100) / 100;
},0);
if(total < toReturn){
result.status = "INSUFFICIENT_FUNDS";
result.change = [];
return result;
} else if(total == toReturn){
result.status = "CLOSED";
result.change = cid;
return result;
} else {
result.status = "OPEN";
cid.forEach ( function (i, a){
while([i][0][1] > 0 && toReturn - cashArray[a] >= 0){
[i][0][1] = Math.round(([i][0][1] - cashArray[a]) * 100) / 100;
result.change[counter][1] += cashArray[a];
toReturn = toReturn - cashArray[a];
var b = Math.round(toReturn * 100);
toReturn = b / 100;
}
counter++;
})
/*for(var i = cid.length - 1; i >= 0; i--){
while(cid[i][1] > 0 && toReturn - cashArray[i] >= 0){
cid[i][1] = cid[i][1] - cashArray[i];
result.change[counter][1] += cashArray[i];
toReturn = toReturn - cashArray[i];
var b = Math.round(toReturn * 100);
toReturn = b / 100;
}
counter++
}
}*/
if (toReturn != 0){
result.status = "INSUFFICIENT_FUNDS";
result.change = [];
return result;
}
var filtered = result.change.filter(function(x){
return x[1] > 0;
});
result.change = filtered;
return result;
}
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]]);
Mi duda esta en la parte de forEach y el For que esta comentado en el codigo. El FOR si me da lo que busco, pero en cambio, el forEach me da 0.50000000000002 (aproximadamente), y no me sale 0.5. He intentado usando Math.round(), toFixed(2), etc. pero ninguno resulta.
Alguien podria explicarme por que es que me sale diferente en este caso? alguna otra sugerencia para acelerar el ejercicio? Mejorar su eficiencia?
edit. Mi objetivo es que el programa corra bien.