gpt4 book ai didi

javascript - 为什么我的 while 循环是无限的?每次都更改变量,但条件仍然始终为真

转载 作者:行者123 更新时间:2023-11-30 12:05:23 26 4
gpt4 key购买 nike

我正在尝试制作一个函数,该函数接受一定数量的现金,并从现有变量中扣除构成该现金数量所需的硬币/纸币数量。我的代码如下所示:

var changeDue = 34.66;

// get number of each coin
var penny = 50;
var nickel = 50;
var dime = 50;
var quarter = 50;
var one = 50;
var five = 50;
var ten = 50;
var twenty = 50;
var hundred = 50;

function getChange(due) {
var currentDue = due;
while(currentDue > 0) {
if(currentDue >= 100 && hundred > 0){
hundred--;
currentDue -= 100;
}
else if(currentDue >= 20 && twenty > 0) {
twenty--;
currentDue -= 20;
}
else if(currentDue >= 10 && ten > 0) {
ten--;
currentDue -= 10;
}
else if(currentDue >= 5 && five > 0) {
five--;
currentDue -= 5;
}
else if(currentDue >= 1 && one > 0) {
one--;
currentDue -= 1;
}
else if(currentDue >= 0.25 && quarter > 0) {
quarter--;
currentDue -= 0.25;
}
else if(currentDue >= 0.1 && dime > 0) {
dime--;
currentDue -= 0.1;
}
else if(currentDue >= 0.05 && nickel > 0) {
nickel--;
currentDue -= 0.05;
}
else if(currentDue >= 0.01 && penny > 0) {
penny--;
currentDue -= 0.01;
}
}
console.log(currentDue);
}

getChange(changeDue);

我试图用 while 循环做的是检查应付的找零金额是否高于某个钞票/硬币,比如一百,并且仍然有这个值(value)的硬币或钞票可用,然后从更改应付金额和硬币/纸币数量。但这会导致无限循环,所以我无法调试它。

我认为,因为我总是从 currentDue 中扣除,并且我设置了如此多的硬币和钞票,所以我不会有这样的问题,但我有。有人可以指出我做错了什么吗?

谢谢

最佳答案

循环可能无限的原因有两个:

  1. floating point numbers 的不精确性, JavaScript 和其他语言用来表示带小数位的数字
  2. 事实上,如果你用完了硬币,就没有办法退出循环

在这个例子中,第一个是原因,但你应该同时解决这两个问题。

要解决第一个问题,您可以执行以下两项操作之一。您可以将所有内容乘以 100 以使用整数,然后在最后除以 100 以获得答案,如下所示:

if(currentDue >= 10000 && hundred > 0){
hundred--;
currentDue -= 10000;
}

...

console.log(currentDue / 100);

或者您可以使用 Math.round() ,像这样:

if(currentDue >= 100 && hundred > 0){
hundred -= 1;
currentDue = Math.round(currentDue - 100);
}

如果这很重要,那么第一个解决方案的性能会更高。否则,请自行选择。

为了解决第二个问题,如果以上条件都不成立,您可以添加一个 break 语句:

...

else {
break;
}

关于javascript - 为什么我的 while 循环是无限的?每次都更改变量,但条件仍然始终为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35374801/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com