计算器不返回结果的功能

时间:2018-01-15 23:07:07

标签: javascript html css

我试图找出为什么我的数学函数没有将结果返回到屏幕。我认为我的switch语句可能有问题,但对我来说看起来很好。我将字符串转换为数字,而不是我传递给开关函数来为我做数学运算。我只用数字1和2测试它,只设置了+和=运算符。它适用于存储字符串并显示它们,但我无法使我的功能完成所有计算以正常工作。

出了什么问题?

var prevNum = "";
var currNum = "";
var setNumber;
var resultNum;
var operator;


function display(x) {

  var screen = document.getElementById("display");

  if (resultNum) { //reset result Numbers
    resultNum = "";
  } else {
    currNum += x;
    screen.value = currNum;
  }

}


function math() {

  //converts string to number
  prevNum = parseFloat(prevNum);
  currNum = parseFloat(currNum);

  switch (operator) {
    case "+":
      resultNum = prevNum + currNum;
      break;

    case "-":
      resultNum = prevNum + currNum;
      break;

    case "*":
      resultNum = prevNum + currNum;
      break;

    default:
      resultNum = currNum;

  }

  screen.value = resultNum;

}


//store number
function storeNum(x) {
  prevNum = currNum;
  operator = x;
  currNum = "";
}
<div class="container">
  <div id="screen">
    <input type="text" id="display" disabled>
    <p id="result"></p>
  </div>
  <div id="keypad">
    <input type="button" value="C">
    <input type="button" value="CE" onclick="clear()">
    <input type="button" value="^">
    <input type="button" value="+" onclick="storeNum('+')">
    <br>
    <input type="button" value="9">
    <input type="button" value="8">
    <input type="button" value="7">
    <input type="button" value="-">
    <br>
    <input type="button" value="6">
    <input type="button" value="5">
    <input type="button" value="4">
    <input type="button" value="*">
    <br>
    <input type="button" value="3">
    <input type="button" value="2" onclick="display('2')">
    <input type="button" value="1" onclick="display('1')">
    <input type="button" value="/">
    <br>
    <input type="button" value="0">
    <input type="button" value=".">
    <input type="button" value="=" onclick="math()">
  </div>
</div>

1 个答案:

答案 0 :(得分:1)

首先,如果您学习如何使用开发人员工具在浏览器上调试代码,那么这是一项很好的投资。您可能想要在线关注一些视频教程。

您的代码无法正常工作的原因是因为变量 screen 是在方法显示中声明的,并且您尝试在方法math中访问它。要做到这一点,你必须在任何方法之外声明 screen (具有全局范围) 也就是说,你的计算器可以改进很多东西,例如:

  1. 您不应该像您一样更改每个数字的方法参数(显示(&#39; 1&#39;),显示(&#39; 2&#39;)...) ,尝试从按钮的值中检索数字:

    <input type="button" value="+" onclick="storeNum()">
    function storeNum(op) {
        op = op || window.event;
        op = op.target || op.srcElement
        operator = op.value;
    }
    

    您可以为运营商做同样的事情:

    function math(){
        operation = prevNum + operator + currNum
        resultNum = eval(operation)
    }
    
  2. 尽可能避免使用switch语句。例如,您可以使用eval()方法来计算字符串,例如eval(&#34; 1 + 2&#34;)= 3。所以你的math()函数可以简单地变成:

    matrix
  3. 最后,也许您想考虑计算器的一些更好的功能要求。现在它一次只能执行一个操作。也许您想评估更复杂的表达式。

  4. 不要复制粘贴上面的代码,因为这只是为了说明我的观点。您可以在此处找到工作版本:https://jsfiddle.net/gtato/6mtej33g/