当前位置: 首页 > 知识库问答 >
问题:

浮点数问题JavaScript

齐高寒
2023-03-14

我正在努力解决一个浮点数问题,其中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]]);

提前道谢!

共有1个答案

姬慎之
2023-03-14

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

change=change.toFixed(2)-0.01;

 类似资料:
  • 问题内容: 我在MySQL数据库架构中引入浮点列时遇到了一个问题,即对浮点值的比较不会总是返回正确的结果。 1-50.12 2-34.57 3-12.75 4-…(其余均小于12.00) 这将返回“ 3”。 我已经读过,在MySQL中比较浮点值是一个坏主意,十进制类型是更好的选择。 我是否有希望继续使用float类型,并使比较正常工作? 问题答案: 您是否注意到以下问题? 在某些行之间有一个额外的

  • 问题内容: 我似乎在使用浮点数时失去了很多精度。 例如,我需要求解一个矩阵: 这是我用来从文本文件导入矩阵的代码: 我需要使用gauss-seidel进行求解,因此需要重新排列x,y和z的方程式: 这是我用来重新排列方程式的代码。是系数矩阵,是答案向量: 但是,我得到的答案并不精确到小数位。 例如,从上面重新排列第二个方程式后,我应该得到: 我得到的是: 这看起来似乎不是一个大问题,但是当您将数字

  • 我正在纠结于一个基本的浮点精度问题。问题就在这里: 运行代码得到“否”

  • 14. 浮点数运算:问题和局限 浮点数在计算机硬件中表示为以 2 为底(二进制)的小数。例如,十进制小数 0.125 是1/10 + 2/100 + 5/1000 的值,同样二进制小数 0.001 是 0/2 + 0/4 + 1/8 的值。这两个小数具有相同的值,唯一真正的区别是,第一个小数是十进制表示法,第二个是二进制表示法。 不幸的是,大多数十进制小数不能完全用二进制小数表示。结果是,一般

  • IBM java 8中的BigDecimal在使用MathContext添加浮点数时计算的值不正确。下面是示例代码 上面的代码打印出来1.000000000000000而不是1.004166666666666667 然而,在上面的最后一行代码中,如果删除MathContext,它将返回正确的值1.0041666666666667。 注意:当使用相同的JVM调试上述代码时,在调试模式下,该值也是1.

  • 3.2. 浮点数 Go语言提供了两种精度的浮点数,float32和float64。它们的算术规范由IEEE754浮点数国际标准定义,该浮点数规范被所有现代的CPU支持。 这些浮点数类型的取值范围可以从很微小到很巨大。浮点数的范围极限值可以在math包找到。常量math.MaxFloat32表示float32能表示的最大数值,大约是 3.4e38;对应的math.MaxFloat64常量大约是1.8