J'ai obtenu un script simple qui fonctionne très bien: Comment l'instruction "while" dans JavaScript évalue-t-elle la variable décrémentée?
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));
Si le solde est de 100, le résultat est:
You've bought 4 item
And your balance is $9.96
Mais, j'ai un résultat inattendu lorsque je change l'instruction while comme ceci:
while (balance > MIN_PURCHASE) {
balance -= taxed(PHONE_PRICE, TAX_RATE);
phoneQt++;
if (balance >= THRESHOLD) {
balance -= taxed(ACCESSORIES_PRICE, TAX_RATE);
accessoriesQT++;
} else {
break;
}
}
le résultat est que j'ai:
You've bought 1 item
And your balance is $77.49
Je pense qu'il y a un problème dans l'évaluation de l'instruction while mais je ne sais pas comment.
En fait, vos deux exemples fonctionnent très bien, au moins sur Firefox, et les deux donnent * Vous avez acheté 5 article et votre solde est 5,68 $ * Dans quel navigateur/environnement avez-vous tester? – rpadovani
@rpadovani Google chrome – user3660139
Non, le 2ème code est erroné, il ne vous permet pas d'acheter le dernier article, alors que cela coûterait exactement le montant que vous avez dans la balance. Cependant, tous les résultats que vous avez publiés n'ont aucun sens à partir du code et des valeurs de votre question – Gavriel