Как я могу заставить функции сложения и вычитания в калькуляторе javascript работать правильно? - PullRequest
0 голосов
/ 01 апреля 2020

Я делаю базовый калькулятор c в javascript. Мои кнопки сложения и умножения работают хорошо. Однако мои функции вычитания и деления не работают.

Когда я щелкаю по вычитанию, по какой-то причине, которую я не могу понять (я почесал свою голову навсегда), он автоматически преобразует число в выводе в отрицательное число.

И для деления я не могу получить логин c, чтобы разделить первое введенное число на второе введенное число.

Вот моя базовая c функция вычисления:

function calculate() {
    if (operator == 'add') {
        runningSum += windowNum;
    } else if (operator == 'subtract') {
        runningSum -= windowNum;  // automatically converts windowNum to negative, unclear why
    } else if (operator == 'multiply') {
        if (runningSum == 0) {
            runningSum = 1;
        }
        runningSum *= windowNum;
    } else if (operator == 'divide') {
        // ever mutation tried comes up with wrong result
    }

    outputWindow.textContent = Number((runningSum).toFixed(5));
    operatorClicked = true;
    numClicked = false;
    document.querySelector('#btnAdd').classList.remove('operatorClicked');
    console.log('windowNum: ' + windowNum);
    console.log('runningSum: ' + runningSum);
}

Поскольку мой проект довольно большой, я включил ссылку на него в коде ручки здесь: https://codepen.io/CDLWebDev/pen/mdJgbeG

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

Я проверил твой код и изменил несколько вещей. Главным образом, вы выполняли вычисления всякий раз, когда был сделан щелчок по знаку операции, что на самом деле не то, что вы хотите делать, поскольку вы не можете выполнять операции, когда не знаете, какое число будет дальше. На калькуляторах вычисления фактически выполняются при нажатии знака «равно».

Что на самом деле должно произойти, и то, что я сделал в приведенном ниже коде, - это сохранить число, которое вы только что нажали, в качестве значения runningSum и выбрать операцию, а затем, когда вы нажмете равное, у вас будет вся необходимая информация.

https://codepen.io/VPR/pen/poJBzXP

function clickOperatorBtn() {
if (numClicked) {
  if (target == document.querySelector("#btnDivide")) {
    operator = "divide";
    runningSum = windowNum;
    clearWindow();
  } else if (target == document.querySelector("#btnMultiply")) {
    operator = "multiply";
    runningSum = windowNum;
    clearWindow();
  } else if ...

Я предполагаю, что это учебное упражнение, так что продолжайте, но я думаю, что логика c позади вашего кода может улучшиться, Когда вы закончите, попробуйте поискать некоторые учебники по калькуляторам, вы найдете множество, которые проведут вас через выполненные шаги и логику c за ней.

0 голосов
/ 01 апреля 2020

Я попробовал ваш код, и функция calculate запускается каждый раз, когда вы меняете оператора. Это означает, что, когда первоначально нажмите на знак «-», вы активируете эту функцию. Терпите меня:

else if (operator == 'subtract') {
    // windowNum == 3 - for example
    // runningSum == 0 
    runningSum -= windowNum;
    // result will be 0 - 3 == -3

Это означает, что если вы сделаете то же самое с, скажем, 7. Вы будете делать -3 - 7 == -10

О разделении: Это также происходит, поэтому, когда вы делаете что-то вроде нажатия 8, а затем деления, то вы делаете 0 / 8 (что, по-видимому, приводит к 1).

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...