【问题标题】:How does "while" statement in JavaScript evaluate decremented variable?JavaScript 中的“while”语句如何计算递减变量?
【发布时间】:2016-01-23 19:11:25
【问题描述】:

我得到了一个运行良好的简单脚本:

var PHONE_PRICE = 20.5,
    ACCESSORIES_PRICE = 12.2,
    TAX_RATE = 0.098,
    THRESHOLD = 30,
    MIN_PURCHASE = taxed(PHONE_PRICE, TAX_RATE);

var balance = prompt("your balance"), phoneQt = 0, accessoriesQT = 0;

function taxed(purchase, tax) {
    return purchase * (1 + tax);
}

/*
 * If the amount of total purchase exceed the balance, 
 * the buying stops.
*/

// MIN_PURCHASE prevent the buying to reduce your balance to negative value, as in -$20
while (true) {
    if (balance < MIN_PURCHASE) {
        break;
    }
    
    balance -= taxed(PHONE_PRICE, TAX_RATE);
    ++phoneQt;
    if (balance >= THRESHOLD) {
        balance -= taxed(ACCESSORIES_PRICE, TAX_RATE);
        ++accessoriesQT;
    }
}

console.log("You've bought " + (phoneQt + accessoriesQT) + " item");
console.log("And your balance is $" + balance.toFixed(2));

如果余额为100,则结果为:

You've bought 4 item
And your balance is $9.96

但是,当我像这样更改 while 语句时,我得到了一个意想不到的结果:

while (balance > MIN_PURCHASE) {
    balance -= taxed(PHONE_PRICE, TAX_RATE);
    phoneQt++;
    if (balance >= THRESHOLD) {
        balance -= taxed(ACCESSORIES_PRICE, TAX_RATE);
        accessoriesQT++;
    } else {
        break;
    }
}

我得到的结果是:

You've bought 1 item
And your balance is $77.49

我认为while语句求值有问题,但不知道怎么解决。

【问题讨论】:

  • 实际上,您的两个示例都可以正常工作,至少在 Firefox 上是这样,并且都给出了 您购买了 5 件商品,余额为 5.68 美元您在哪个浏览器/环境中进行了测试他们?
  • @rpadovani 谷歌浏览器
  • 不,第二个代码是错误的,它不会让您购买最后一件商品,因为它会花费您余额中的金额。但是,从问题中的代码和值开始,您发布的所有结果都毫无意义

标签: javascript while-loop evaluation decrement


【解决方案1】:

在第一种情况下,即使余额低于阈值,您仍继续购买手机。在第二个代码示例中,一旦您决定不购买配件,您就会完全停止。尝试删除 else 子句。 无论如何,在这两个例子中,结果都是一样的——你买了 5 件商品。但是您仍然应该删除 else 部分。

【讨论】:

  • 第一种情况是我打算做的。
【解决方案2】:

尝试 >= 而不是 >

while (balance >= MIN_PURCHASE) {
    balance -= taxed(PHONE_PRICE, TAX_RATE);
    ++phoneQt;
    if (balance >= THRESHOLD) {
        balance -= taxed(ACCESSORIES_PRICE, TAX_RATE);
        ++accessoriesQT;
    }
}

【讨论】:

  • 当我在浏览器中以 100 的起始余额运行您的代码时,我得到:您购买了 5 件商品。你的余额是 5.68 美元。我的代码得到了完全相同的结果
  • 我在谷歌浏览器中使用 sn-p
  • 是的,但即使是您的 sn-p 也给了我相同的信息:5 件商品,还剩 5.68 美元。
  • 我在firefox上试了一下,结果和你的一样,在我的chrome上真的很像。
  • 我在 Chrome 和 Firefox 上都试过了,我得到了 5 件商品,还剩 5.68 美元
猜你喜欢
  • 2013-07-30
  • 1970-01-01
  • 1970-01-01
  • 2021-02-02
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多