2
我努力解決浮點數問題,其中var更改返回爲0.0999重複,我需要返回0.01(一分錢)。代碼工作正常,除了最後一分錢,因爲這個問題。 這是我的第一篇文章在這裏,所以請原諒格式化...浮點數問題JavaScript
function checkCashRegister(price, cash, cid) {
var change = cash - price;
var totalCid =0;
for(var i = 0; i < cid.length; i++) totalCid += cid[i][1];
var returnArr = [["PENNY",0], ["NICKEL", 0], ["DIME", 0], ["QUARTER", 0],["ONE", 0], ["FIVE", 0], ["TEN", 0], ["TWENTY", 0], ["ONE HUNDRED", 0]];
function hasValue (value) {return value[1] > 0;}
if(change>totalCid) {
return "Insufficient Funds";
}
else if(change==totalCid) {
return "Closed";
}
else {
while(change >= 0.01) {
if (change >=100 && cid[8][1] >= 100){
change -= 100;
cid[8][1] -= 100;
returnArr[8][1] += 100;
}
else if (change >= 20 && cid[7][1] >= 20){
change -= 20;
cid[7][1] -= 20;
returnArr[7][1] += 20;
}
else if (change >= 10 && cid[6][1] >= 10){
change -= 10;
cid[6][1] -= 10;
returnArr[6][1] += 10;
}
else if (change >= 5 && cid[5][1] >= 5){
change -= 5;
cid[5][1] -= 5;
returnArr[5][1] += 5;
}
else if (change >= 1 && cid[4][1] >= 1){
change -= 1;
cid[4][1] -= 1;
returnArr[4][1] += 1;
}
else if (change >= 0.25 && cid[3][1] >= 0.25) {
change -= 0.25;
cid[3][1] -= 0.25;
returnArr[3][1] += 0.25;
}
else if (change >= 0.10 && cid[2][1] >= 0.10){
change -= 0.10;
cid[2][1] -= 0.10;
returnArr[2][1] += 0.10;
}
else if (change >= 0.05 && cid[1][1] >= 0.05){
change -= 0.05;
cid[1][1] -= 0.05;
returnArr[1][1] += 0.05;
}
else if (change >= 0.01 && cid[0][1] >= 0.01){
change -= 0.01;
cid[0][1] -= 0.01;
returnArr[0][1] += 0.01;
}
else return "Insufficient Funds";
}
return returnArr.filter(hasValue).reverse();
}
}
調用
checkCashRegister(3.26, 100.00, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.10], ["QUARTER", 4.25], ["ONE", 90.00], ["FIVE", 55.00], ["TEN", 20.00], ["TWENTY", 60.00], ["ONE HUNDRED", 100.00]]);
應該返回
[ 「二十」,60.00],[ 「TEN」, 20.00],[ 「FIVE」,15.00],[ 「ONE」,1.00],[ 「季」,0.50],[ 「DIME」,0.20],[ 「便士」,0.0 ]]
但是它返回
[[「TWENTY」,60.00],[「TEN」,20.00],[「FIVE」,15.00],[「ONE」,1.00],[「QUARTER」,0.50] DIME「,0.20],[」PENNY「,0.0 ]]
在此先感謝!
你真正的問題是什麼?如果你想知道_why_它這樣做,那麼你的答案在這裏:[浮點數學是否被破壞?](http://stackoverflow.com/questions/588004/is-floating-point-math-broken)如果你'不知道如何解決這個問題,那麼很簡單的答案是,將浮點與貨幣值混合並不是一個好主意。 –
是的。我會乘以100的傳入值並將其轉換爲整數。你也可以通過使用除法和模數來提高你的算法的性能,我認爲...但這是一個不同的問題... – karina
解決使用這種方法,謝謝! @karina –