Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我试图减法,但它总是把一个变量和另一个变量相加_Javascript_Function - Fatal编程技术网

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;