我制作了一个简单的JavaScript计算器,它仅在使用单个数字时才有效。但是当你尝试使用两位数字(如12)时,它就不会起作用。例如,1 + 2 = 3但1 + 12 = 2,因为它只计算输入的前两个数字。
我相信这是因为我有一个阵列设置来收集按下的前2个数字,然后对这2个数字进行操作,如下面的代码所示。我怎样才能解决这个问题?
var res = add(operands[0], operands[1]);
答案 0 :(得分:3)
在我看来最简单的方法一种方法是将操作数保持为字符串,直到你准备好使用它们为止。
function subtract(a,b) {
return parseInt(a,10) - parseInt(b,10);
}
var operands = ["",""];
var operator;
$(".screen").text("");
$(".num").each(function() {
var selection = $(this).text();
$(this).click(function() {
$(".screen").append(selection);
if (operator) {
operands[1] = operands[1] + selection;
} else {
operands[0] = operands[0] + selection;
}
});
});
另一种选择是根本不存储操作数,而是取出字符串的文本并对其进行评估(在你克服了你使用eval的事实之后)
$(".screen").text("");
$(".num, .operator").each(function() {
var selection = $(this).text();
$(this).click(function() {
$(".screen").append(selection);
});
});
$(".equals").click(function() {
$(".screen").text(function(i,text){
return eval("(" + text + ")");
});
});
$(".clear").click(function() {
$(".screen").text("");
});
此版本的优势在于它现在支持多个运算符以及任何在javascript中运行而没有任何其他代码的运算符(只添加了错误捕获。)http://jsfiddle.net/r8X9N/5/
答案 1 :(得分:1)
您还可以存储数组中按下的数字,并在按下运算符或等号时加入它们。
var num = [];
$(".screen").text("");
$(".num").each(function() {
var selection = $(this).text();
$(this).click(function() {
$(".screen").append(selection);
num.push(parseInt(selection));
//operands.push(parseInt(selection));
});
});
$(".operator").each(function() {
var selection = $(this).text();
$(this).click(function() {
operator = selection;
operands.push(parseInt(num.join('')));
num = [];
$(".screen").append(operator);
});
});
$(".equals").click(function() {
operands.push(parseInt(num.join('')));
num = [];
switch (operator) {
case "+":
var res = add(operands[0], operands[1]);
$(".screen").text("").append(res);
operands = [];
operator = "";