收银机程序无法正常工作

时间:2016-09-14 21:41:34

标签: javascript algorithm floating-point numbers

我不是在问我如何用另一种方式编写这个程序。我在程序中犯了错误,所以问题不重复。我的问题是程序中的错误或缺失是什么。我只想学习并删除它。

我的程序在某些情况下会出错,包括0.1,0.05或0.01的倍数,但对于其他数字,它运行正常。例如,它为此输入返回的资金不足(价格(3.3),现金(10.0))而不是 [五,五],[一,1],[四分之一,0.5],[一角,0.2] 。 我认为算法是正确的,但我看不出有什么问题。

function checkCashRegister(price, cash, cid) {
  var left = cash - price;
  var toplam = 0;
  var paralar = [0.01, 0.05, 0.10, 0.25, 1.00, 5.00, 10.00, 20.00, 100.00];
  var artan = [];
  for (var i = 0; i < cid.length; i++) {
    toplam += cid[i][1];
  }

  if (left > toplam) {
    return "Insufficient Funds";
  } else if (left === toplam) {
    return "Closed";
  }

  var t = paralar.length - 1;
  for (var t = paralar.length - 1; t >= 0; t--) {
    if (left >= paralar[t]) {
      var sayac = 0;
      while (left >= paralar[t] && cid[t][1] > 0) {
        left -= paralar[t];
        sayac += paralar[t];
        cid[t][1] -= paralar[t];
      }
      var bos = [cid[t][0], sayac];
      artan.push(bos);
    }
  }

  if (left > 0) {
    return "Insufficient Funds";
  }

  return artan;
}
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]
]);

这个例子回报资金不足。但如果我将3.26更改为3.25则返回正确的字符串。

0 个答案:

没有答案