2 votes

En JavaScript, faire un simple calcul de frais de port et de manutention

J'ai des problèmes avec un simple calcul JavaScript. Mon document est censé ajouter 1,50 $ à une commande si elle est inférieure ou égale à 25 $, ou ajouter 10 % de la commande si elle est supérieure à 25 $. Le problème exact est le suivant :

De nombreuses entreprises facturent normalement des frais d'expédition et de manutention pour les achats. Créez une page web qui permet à l'utilisateur de saisir un prix d'achat dans une zone de texte et inclut une fonction JavaScript qui calcule les frais de port et de manutention. Ajoutez une fonctionnalité au script qui ajoute des frais d'expédition et de manutention d'un montant minimum de 1,50 $ pour tout achat inférieur ou égal à 25,00 $. Pour toute commande supérieure à 25,00 $, ajoutez 10 % au prix d'achat total pour les frais d'expédition et de manutention, mais n'incluez pas les frais minimums d'expédition et de manutention de 1,50 $. La formule de calcul d'un pourcentage est la suivante : prix * pourcentage / 100. Par exemple, la formule pour calculer 10 % d'un prix d'achat de 50,00 $ est 50 * 10 / 100, ce qui donne des frais d'expédition et de manutention de 5,00 $. Après avoir déterminé le coût total de la commande (achat plus frais de port et de manutention), affichez-le dans une boîte de dialogue d'alerte.

Voici mon code :

    var price = window.prompt("What is the purchase price?", 0);
var shipping = calculateShipping(price);
var total = price + shipping;
function calculateShipping(price){
if (price <= 25){
 return 1.5;
}
else{
 return price * 10 / 100
}
}
window.alert("Your total is $" + total + ".");

Lors des tests, je saisis un nombre dans la boîte d'invite et, au lieu de calculer comme si j'avais saisi un nombre, il calcule comme si j'avais saisi une chaîne de caractères, c'est-à-dire que je saisis 19 et j'obtiens 191,5 ou je saisis 26 et j'obtiens 262,6.

2voto

James Wiseman Points 18347

Utilisation parseFloat vous aidera :

var price = parseFloat(window.prompt("What is the purchase price?", 0))
var shipping = parseFloat(calculateShipping(price));
var total = price +shipping;
function calculateShipping(price){
if (price <= 25){
 return 1.5;
}
else{
 return price * 10 / 100
}
}
window.alert("Your total is $" + total + ".");

Voir le travail sur le site : http://jsfiddle.net/e8U6W/

Par ailleurs, une méthode peu connue mais plus performante consisterait simplement à -0 :

var price =window.prompt("What is the purchase price?", 0) - 0;

(Voir : La soustraction de zéro est-elle une sorte d'astuce JavaScript pour améliorer les performances ? )

Veillez à commenter ceci, car ce n'est pas aussi évident pour ceux qui lisent votre code que parseFloat

0voto

hvgotcodes Points 55375

Vous pouvez facilement convertir une chaîne de caractères en un nombre

http://www.javascripter.net/faq/convert2.htm

En principe, JS propose les méthodes parseInt et parseFloat...

0voto

Dutchie432 Points 16305

En fait, vous devez convertir vos résultats textuels en valeurs flottantes à l'aide de la fonction parseFloat()

http://www.w3schools.com/jsref/jsref_parseFloat.asp

0voto

Phrogz Points 112337

0voto

Blender Points 114729

Il s'agit d'une multiplication un peu redondante, mais votre problème est que les nombres saisis sont traités comme des chaînes de caractères et non comme des nombres. Vous devez les convertir en nombres à virgule flottante :

var price = parseFloat(window.prompt("What is the purchase price?", 0));
var shipping = calculateShipping(price);
var total = price + shipping;

function calculateShipping(price)
{
  if (price <= 25)
  {
   return 1.5;
  } else {
    return price / 10
  }
}

window.alert("Your total is $" + total + ".");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X