从头开始构建JavaScript计算器?

时间:2018-10-05 21:45:19

标签: javascript calculator

作为学习练习,我正在尝试从零开始构建JavaScript计算器,而无需遵循教程。大部分功能都在起作用,除非是紧接着进行计算。即: 7 x 6 + 42 在这种情况下,它将显示重置为0,但无论如何似乎仍会保留该变量。

是否需要将数字存储为3个值而不是2个?目前,我正在使用: - currentValue ,它保存以前的计算总数。 - newValue ,这是用户当前输入的数字。

function newNum(pressed) { //Adds digit of key pressed to new number being entered.
  //console.log ("Button pressed " + pressed);

  if (newValue == 0) { //If new calculation, newValue is set to key pressed.
    newValue += pressed;
  } else { //Else if continuing calculation, key pressed is added to end of newValue.
    newValue = newValue.toString();
    newValue = newValue + pressed; //Adds digit at end of String, then converts back to Number.
    newValue = parseFloat(newValue);
  }
  document.getElementById('result').innerHTML = newValue;
}

function newCalc(pressed) { //Will use this mathematical operation to find the value.
  if (!currentValue) {
    currentValue = newValue;
  } else {
    document.getElementById('result').innerHTML = newValue;
  }

  newOperation = pressed;
  newValue = 0;
}

function equals() { //Resolves calculation.
  newValue = parseFloat(newValue);

  switch(newOperation) {
    case "/":
        currentValue = (currentValue / newValue);
        break;
    case "*":
        currentValue = (currentValue * newValue);
        break;
    case "-":
        currentValue = (currentValue - newValue);
        break;
    case "+":
        currentValue = (currentValue + newValue);
        break;
  }

  currentValue = parseFloat(currentValue);
  newValue = 0;
  document.getElementById('result').innerHTML = currentValue;
}

https://codepen.io/adam_weiler/pen/aRNppX

我仍在学习,我知道代码有点肿。关于如何简化它的任何建议也将有所帮助!

编辑:我举了一个不好的例子。我只是在编码一个基本的计算器,您在其中点击按钮以输入数字。它不使用BEDMAS。操作的顺序是“用户输入它们的顺序”。是的,只是一个基本的点击计算器。

2 个答案:

答案 0 :(得分:0)

在您的示例中,代码尝试同时计算7 * 6和6 + 42,但是由于将其乘以7,所以无法将6加到42中,因此无法用计算。您应该对运算首选项制定规则,当有乘数或除数时,应将舍入数字计算为新数字,然后可以通过加法或减法进一步运算。另外,您还应该定义从左到右的规则,因此,如果您有2 * 3/4,则不会再次发生该错误。

答案 1 :(得分:0)

如果您输入

 7 | x | 8 | = | + | 5 | = |

它正常工作。我想您想在每次按下操作按钮时不仅要在equals()上执行= ...

  

是否需要将数字存储为3个值而不是2个?

不,您不必。诀窍是一个接一个地执行操作,因此您始终只能使用两个值:

 7
 7 x
 7 x 8
 7 x 8 +
 46 + // merged
 46 + 5
 46 + 5 =
 51 // merged