Salut @anti91,
dans ta version modifée il y a une instruction vers la fin, var Prixtot = Prix * Taux_com qui écrase la valeur précédente de Prixtot. La version de @danielhagnoul corrige ce problème, normalement.
Après, Daniel n’a pas remis en question ton test avec la valeur 350 001 qui écrase les taux calculés avant.
Je propose de réécrire ce code avec des if / else enchaînés qui auront deux avantages :
- on perçoit un peu mieux le « flot logique » du calcul ;
- on écrit moins de chiffres en dur, et donc on a moins de chances de faire des fautes de frappe.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| function Calcul() {
"use strict"; // voir https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Strict_mode
console.log("Africa");
let Prix = document.getElementById('prix').value;
let Taux_com;
if (Prix < 1) {
throw Error("Calcul non défini pour prix < 1");
}
else if (Prix < 100000) {
Taux_com = 6000;
}
else if (Prix < 200000) {
Taux_com = 1.06;
}
// que faire autour de 350000 ?
//
// ...
//
else if (Prix < 400000) {
Taux_com = 1.05;
}
else { // Prix >= 400000
Taux_com = 1.04;
}
let Prixtot;
if (Prix < 100000) {
Prixtot = Prix + Taux_com;
}
else {
Prixtot = Prix * Taux_com;
}
let Com = Prixtot - Prix;
document.getElementById('prix_fai').value = Prixtot.toFixed();
document.getElementById('commission').value = Com.toFixed();
} |
Tu noteras également que j’ai passé toutes les valeurs numériques en nombres. En JavaScript, il faut se méfier des conversions de type implicites comme de la peste. D’ailleurs, je te suggère une petite amélioration sur la façon de récupérer la valeur Prix.
Pour la clarté, je vais mettre une référence sur l’input dans une variable :
const inputPrix = document.getElementById('prix');
- si l’input #prix est de type="number", tu peux utiliser inputPrix.valueAsNumber ;
- sinon, convertis explicitement avec parseInt(inputPrix.value, 10).
Si, comme moi, tu n’aimes pas compter les zéros, tu peux utiliser la notation scientifique 1e5, 2e5, 3.5e5, etc. à la place de 100 000, 200 000, 350 000, respectivement.
À l’affichage, pour le confort de l’utilisateur ou de l’utilisatrice, tu peux utiliser un formateur :
1 2
| const formatter = Intl.NumberFormat();
console.log(formatter.format(350000)); // "350 000" |
Un exemple un peu plus complexe :
1 2
| const formatter = Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR' });
console.log(formatter.format(350000)); // "350 000,00 " |
Pour finir, tu n’es pas à l’abri de petits problèmes de précision, mais on va garder ça pour plus tard
Partager