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

Aucune réponse