繁体   English   中英

浮点数问题JavaScript

[英]Floating Point Number issue JavaScript

我正在努力解决浮点数问题,其中var更改返回为0.0999重复发生,并且我需要返回0.01(一分钱)。 由于这个问题,除了最后一分钱以外,代码都可以正常工作。 这是我在这里的第一篇文章,因此请原谅格式...

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]]);

应该回来

[[“ TWENTY”,60.00],[“ TEN”,20.00],[“ FIVE”,15.00],[“ ONE”,1.00],[“ QUARTER”,0.50],[“ DIME”,0.20],[ “ PENNY”,0.0 4 ]]

但它返回

[[“ TWENTY”,60.00],[“ TEN”,20.00],[“ FIVE”,15.00],[“ ONE”,1.00],[“ QUARTER”,0.50],[“ DIME”,0.20],[ “ PENNY”,0.0 3 ]]

提前致谢!

通过对处理PENNY的'else if'条件中的'change'进行以下修改,可以得到预期的答案[“ PENNY”,0.04]

更改= change.toFixed(2)-0.01;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM