Bonjour à tous,
j'essaye de faire une calculatrice simple, sans gestion de virgule, ni de mémoire, c'est déjà difficile pour moi, j'ai pu à l'aide d'un tuto écrire ce code :
// Créer une calculatrice simplifiée
//Declaration des variables
const ECRAN = document.querySelector("#pEcran");
let precedent = 0;
let affichage = "";
let nb1;
let nb2;
let operateur = null;
let tableauOperateurs;
let yesNo;
window.onload = () => {
//Ecouter les click sur les touches
let touches = document.querySelectorAll(".touche");
for (let touche of touches) {
touche.addEventListener("click", gestionTouches);
}
}
//Reagir au click sur les touches
function gestionTouches() {
let touche = this.innerText;
//Verifier chiffre
if(parseInt(touche) >= 0) {
//afficher
affichage = (affichage === "") ? touche.toString() : affichage + touche.toString();
ECRAN.innerText = affichage;
} else {
switch(touche) {
//calculs
case "+":
case "-":
case "*":
case "/":
//calcul de l'etape precedente
precedent = (precedent === 0) ? parseInt(affichage) :
calcul(operateur, parseInt(precedent), parseInt(affichage));
//affichage
ECRAN.innerText = precedent;
//stockage operation
operateur = touche;
//re init affichage
affichage = "";
break;
case "=":
//calcul de l'etape precedente
precedent = (precedent === 0) ? parseInt(affichage) :
calcul(operateur, precedent, parseInt(affichage));
//affichage
ECRAN.innerText = precedent;
//stocke le resultat dans affichage
affichage = precedent;
//re init le precedent
precedent = 0;
break;
}
}
}
tableauOperateurs = ["+", "-", "/", "*"];
//calculs
function calcul(operateur, nb1, nb2) {
let result;
if (operateur == tableauOperateurs[0]) {
return result = nb1 + nb2;
} else if (operateur == tableauOperateurs[1]){
return result = nb1 - nb2;
} else if (operateur == tableauOperateurs[2]) {
return result = nb1 / nb2;
} else if (operateur == tableauOperateurs[3]) {
return result = nb1 * nb2;
} else {
return result = "Ce n'est pas le bon opérateur";
}
}
Il semble marcher, mais il y a un bug dans le cas où l'utilisateur tape 2 fois de suite sur une touche de type opérateur : l'affichage écrit NaN. J'ai essayé de rajouter une condition if pour gérer ce cas particulier, mais je ne vois pas comment procéder. Je sollicite alors l'aide de la communauté. bonne journée