JS计算器不会计算两位数

时间:2014-05-09 15:28:47

标签: javascript jquery

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

我相信这是因为我有一个阵列设置来收集按下的前2个数字,然后对这2个数字进行操作,如下面的代码所示。我怎样才能解决这个问题?

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

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

2 个答案:

答案 0 :(得分:3)

在我看来最简单的方法一种方法是将操作数保持为字符串,直到你准备好使用它们为止。

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/

答案 1 :(得分:1)

http://jsfiddle.net/r8X9N/4/

您还可以存储数组中按下的数字,并在按下运算符或等号时加入它们。

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 = "";