首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >slice()方法/Javascript

slice()方法/Javascript
EN

Stack Overflow用户
提问于 2019-12-01 21:04:10
回答 1查看 71关注 0票数 1

代码语言:javascript
运行
复制
function checkCashRegister(price, cash, cid) {
  let amount = {
    "ONE HUNDRED": 100,
    "TWENTY": 20,
    "TEN": 10,
    "FIVE": 5,
    "ONE": 1,
    "QUARTER": 0.25,
    "DIME": 0.1,
    "NICKEL": 0.05,
    "PENNY": 0.01
  }
  let copy = cid.slice();
  let sum = cid.map(el => (el[1])).reduce((a, b) => (a + b));
  let changeDue = cash - price;
  let newArr = [];
  let result = {};

  if (sum === changeDue) {
    result.status = 'CLOSED';
    result.change = copy;
  }

  for (let i = cid.length - 1; i >= 0; i--) {
    let count = 0;
    let unit = amount[cid[i][0]];
    while (unit <= changeDue && unit <= cid[i][1]) {
      changeDue -= unit;
      cid[i][1] -= unit;
      count++;
    }
    newArr.push([cid[i][0], count * unit]);
  }
  return result;
}

console.log(checkCashRegister(19.5, 20, [
  ["PENNY", 0.5],
  ["NICKEL", 0],
  ["DIME", 0],
  ["QUARTER", 0],
  ["ONE", 0],
  ["FIVE", 0],
  ["TEN", 0],
  ["TWENTY", 0],
  ["ONE HUNDRED", 0]
]));

您好,我正在尝试解决一个问题,我应该打印状态和金额的变化。我正在处理过程中,我有一个与方法相关的问题。

因为如果现金收款机的金额等于现金减去价格,我应该打印"status: close“和货币,所以我用slice()方法复制了"cid”数组(这是输入),这样它就不会影响我要在其他条件下使用的"cid“,我用它来计算找零的金额。

因此,为了检查closed状态是否正常工作,我打印了它,我预计PENNY是0.5,但由于某种原因,它受到了下面的if -statement(用于循环部分)的代码的影响,PENNY部分是0.000XXX。因此,当我试图将return语句移到if语句的正下方时。它像我预期的那样工作。

我的问题是,我预计for循环既不会影响也不会受到影响,因为slice()方法不会改变原始的arry(cid),但它并没有像我预期的那样工作。

有人能找出原因吗?

EN

回答 1

Stack Overflow用户

发布于 2019-12-01 21:31:03

你的代码的问题是,它减去了几分钱作为小数值,所以当你用几分钱做算术时,你可能会得到非四舍五入的便士,我的意思是你可以得到0.0799999,而不是0.08,等等。这是因为0.01只是内部表示的近似。这不是整数值的情况,整数值总是精确地表示。因此,我要做的第一件事就是用便士数而不是美元数来处理分数(1便士是1,1美元是100,100美元是10000,依此类推)

考虑下面的例子:

代码语言:javascript
运行
复制
console.log(100 - (0.01 + 0.01)) // 99.98
console.log(100 - 0.01 - 0.01) // 99.97999999999999

至于为什么结果会受到影响的主要问题--这是因为尽管您确实通过

代码语言:javascript
运行
复制
let copy = cid.slice();

然而,新的数组具有相同的元素。我的意思是copy1和cid1都指向同一个JS对象,恰好是'PENNY',0.5。这实际上是绝对意义上的同一物体。

看,你没有做“深度复制”,你只做了“浅”复制。您复制了容器,但内部元素是相同的,它们链接到相同的内容。就像这样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59125781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档