Javascript 我试图减法,但它总是把一个变量和另一个变量相加
全局定义变量Javascript 我试图减法,但它总是把一个变量和另一个变量相加,javascript,function,Javascript,Function,全局定义变量 let firstNumber = 0; let secondNumber = 0; let clearValue; let operator = ""; const divs = document.querySelectorAll("#panel div"); div选择和变量赋值 divs.forEach((div) => { div.addEventListener("click", () => {
let firstNumber = 0;
let secondNumber = 0;
let clearValue;
let operator = "";
const divs = document.querySelectorAll("#panel div");
div选择和变量赋值
divs.forEach((div) => {
div.addEventListener("click", () => {
let selection1 = div.id;
switch (selection1) {
case "one":
inputArea.value += "1";
break;
case "two":
inputArea.value += "2";
break;
case "three":
inputArea.value += "3";
break;
case "four":
inputArea.value += "4";
break;
case "five":
inputArea.value += "5";
break;
case "six":
inputArea.value += "6";
break;
case "seven":
inputArea.value += "7";
break;
case "eight":
inputArea.value += "8";
break;
case "nine":
inputArea.value += "9";
break;
case "zero":
inputArea.value += "0";
break;
case "decimal":
inputArea.value += ".";
break;
case "clear":
clearValue = inputArea.value;
clearValue = firstNumber.slice(0, -1);
inputArea.value = clearValue;
break;
case "allClear":
inputArea.value = "";
break;
case "add":
operator = "+";
firstNumber = parseFloat(inputArea.value);
inputArea.value = "+";
break;
case "subtract":
operator = "-";
firstNumber = parseFloat(inputArea.value);
inputArea.value = "-";
break;
case "divide":
operator = "/";
firstNumber = parseFloat(inputArea.value);
inputArea.value = "/";
break;
case "multiply":
operator = "x";
firstNumber = parseFloat(inputArea.value);
inputArea.value = "x";
break;
case "module":
operator = "%";
firstNumber = parseFloat(inputArea.value);
inputArea.value = "%";
break;
case "equal":
secondNumber = parseFloat(inputArea.value);
console.log(secondNumber);
inputArea.value = calculate(firstNumber, operator, secondNumber);
break;
}
});
});
计算函数
const calculate = (num1, oper, num2) => {
num1 = parseFloat(num1);
num2 = parseFloat(num2);
switch (oper) {
case "+":
console.log(num1 + num2);
return num1 + num2;
case "-":
console.log(num1 - num2);
return num1 - num2;
case "x":
return num1 * num2;
case "/":
return num1 / num2;
case "%":
return num1 % num2;
}
};
这是我完整代码的链接
我正在尝试制作一个计算器,因为我提供了一个输入字段,用户可以单击计算器上的按钮,以给出一些值作为输入。当我输入第一个值,然后按下运算符按钮时,我将输入字段值保存到名为“first number”的变量中,然后我将运算符存储在名为operator的变量中,单击“=”,我将另一个数字存储在名为secondNumber的变量中,然后我调用计算部分的函数。使用开关盒,我检查运算符的值,然后相应地返回值。加法的效果很好,但当我尝试减去一个数字时,结果仍然是将它们相加。有人能告诉我,我哪里出了问题吗?这是因为您的第二个号码也得到了操作员的签名 在这里,您的输入区域还可以使用运算符,因此当您执行2-2时,您的第一个数字是2运算符是-而您的第二个数字是-2 so 2--2=4 这就是你的其他操作员也不工作的原因 如果让我们假设你想乘以2,你的第二个数字将是 parseFloat'x2'=NaN 尝试删除除数字和点以外的所有额外符号,如下所示,以计算第二个数字
代码的问题是,在numericals0-9 press的情况下,您在字符串后面加上按下的数字,但是字符串已经包含运算符值,例如+、-,等等 所以,让我们试着理解减法流中发生了什么- 用户按5: inputArea.value='5' 用户按-: inputArea.value='-' 运算符='-' 用户按4: inputArea.value='-4',因为您正在出现 运算符='-'
然后用值-5、“-”、“-4”调用calculate函数,结果是5--4=>5+4,因此即使在进行减法运算时也会进行加法运算。您的解决方案有点复杂。这个怎么样。所有按钮只有一个事件列表器。使用函数“return”+exp进行计算,以替代“eval”或您拥有的复杂开关 var-arr=[]; 常量计算=表达式=>{ 返回函数'return'+表达式; }; const update=str=>{ document.getElementById'line'.innerText=str; }; document.getElementById'buttons'。addEventListener'click',e=>{ 如果e.target.nodeName=='按钮'{ 让value=e.target.attributes['data-value'].value; 如果值=='='{ updatecalculatearr.join; arr=[]; }否则{ arr.pushvalue; updatearr.join; } } }; 线{ 字体系列:mono; 边框:薄而实的黑色; 高度:1米; } 1. 2. 3. + - =
这段代码当然有助于缩短我的代码,但由于我是编程界的新手,这有点令人困惑。谢谢你的帮助。
case "equal":
secondNumber = parseFloat(inputArea.value);
console.log(secondNumber);
inputArea.value = calculate(firstNumber, operator, secondNumber);
break;
case "equal":
secondNumber = parseFloat(inputArea.value.replace(/[^0-9\.]+/g, ""));
console.log(secondNumber);
inputArea.value = calculate(firstNumber, operator, secondNumber);
break;