作为学习练习,我正在尝试从零开始构建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。操作的顺序是“用户输入它们的顺序”。是的,只是一个基本的点击计算器。
答案 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