我做了一个简单的JavaScript计算器,它仅在使用一位数字时才有效。但是,当您尝试使用两位数数字(例如12)时,它将不起作用。例如,1 + 2 = 3但1 + 12 = 2,因为它仅计算输入的前两个数字。

我相信这是因为我设置了一个数组来收集所按的前两个数字,然后对这两个数字进行运算,如下面的代码所示。我怎样才能解决这个问题?

var res = add(operands[0], operands[1]);


我的代码:http://jsfiddle.net/r8X9N/

最佳答案

我认为最简单的方法之一是将操作数保留为字符串,直到准备使用它们为止。

http://jsfiddle.net/r8X9N/2/

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的事实之后)

http://jsfiddle.net/r8X9N/3/

$(".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/

09-07 17:30