我试图找出为什么我的数学函数没有将结果返回到屏幕。我认为我的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>
答案 0 :(得分:1)
首先,如果您学习如何使用开发人员工具在浏览器上调试代码,那么这是一项很好的投资。您可能想要在线关注一些视频教程。
您的代码无法正常工作的原因是因为变量 screen 是在方法显示中声明的,并且您尝试在方法math中访问它。要做到这一点,你必须在任何方法之外声明 screen (具有全局范围) 也就是说,你的计算器可以改进很多东西,例如:
您不应该像您一样更改每个数字的方法参数(显示(&#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)
}
尽可能避免使用switch语句。例如,您可以使用eval()方法来计算字符串,例如eval(&#34; 1 + 2&#34;)= 3。所以你的math()函数可以简单地变成:
matrix
最后,也许您想考虑计算器的一些更好的功能要求。现在它一次只能执行一个操作。也许您想评估更复杂的表达式。
不要复制粘贴上面的代码,因为这只是为了说明我的观点。您可以在此处找到工作版本:https://jsfiddle.net/gtato/6mtej33g/