首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Javascript中进行连续的移动计算

在Javascript中进行连续的移动计算
EN

Stack Overflow用户
提问于 2018-07-01 00:28:53
回答 1查看 171关注 0票数 0

我有一个用JS做的简单的计算器,运行良好,但当我完成计算并得到结果(即按下"=“按钮)时,我希望返回的结果处于保存状态。"=“按钮必须准备好再次单击,并获得相同的结果,然后将其添加到保存结果中。

我尝试了许多显而易见的方法,比如将结果添加到自身(这不起作用,因为结果将与自身相乘,而不是相加),利用eval()函数并在最终结果中添加"+“字符串,等等。

TLDR:如果你去任何一个计算器程序,输入"2+2“并点击equals,你就会得到4。如果您再次单击equals,您将看到6 ("2+2+2")。

下面是我当前的代码:

代码语言:javascript
复制
var disp = document.getElementById("calc-output"),
  acceptedInputs = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, "-", ".", "+", "*", "/"];

function ud(n) {
  if (acceptedInputs.includes(n)) {
    if (disp.innerHTML.length == 31) {
      disp.innerHTML = 0;
    }
    if (disp.innerHTML.length < 18) {
      if (disp.innerHTML != 0) {
        disp.innerHTML += n;
      } else if (acceptedInputs.slice(11, -1).includes(n)) {
        disp.innerHTML = 0 + n;
      } else if (disp.innerHTML.toString().slice(1, 2) == ".") {
            if (disp.innerHTML.toString().split(".").length-1 <= 1) {
                disp.innerHTML += n;
            }
      } else {
        disp.innerHTML = n;
      }
    }
  }
}

function answer() {
  if (eval(disp.innerHTML) == disp.innerHTML) {
    disp.innerHTML = disp.innerHTML + "+"
  }
  c = eval(disp.innerHTML);
  disp.innerHTML = c;
}

function clear() {
  disp.innerHTML = "0";
}

function back() {
  var str = disp.innerHTML.toString();
  if (disp.innerHTML != 0 || str.charAt(1) == ".") {
    if (str.length >= 2) {
      str = str.slice(0, -1);
      disp.innerHTML = str;
    } else {
      disp.innerHTML = 0;
    }
  }
}

document.getElementById("n1").addEventListener("click", function() {
  ud(1);
});
document.getElementById("n2").addEventListener("click", function() {
  ud(2);
});
document.getElementById("n3").addEventListener("click", function() {
  ud(3);
});
document.getElementById("n4").addEventListener("click", function() {
  ud(4);
});
document.getElementById("n5").addEventListener("click", function() {
  ud(5);
});
document.getElementById("n6").addEventListener("click", function() {
  ud(6);
});
document.getElementById("n7").addEventListener("click", function() {
  ud(7);
});
document.getElementById("n8").addEventListener("click", function() {
  ud(8);
});
document.getElementById("n9").addEventListener("click", function() {
  ud(9);
});
document.getElementById("zero-button").addEventListener("click", function() {
  ud(0);
});
document.getElementById("comma-button").addEventListener("click", function() {
  ud('.');
});

document.getElementById("plus-button").addEventListener("click", function() {
  ud('+');
});
document.getElementById("minus-button").addEventListener("click", function() {
  ud('-');
});
document.getElementById("multi-button").addEventListener("click", function() {
  ud('*');
});
document.getElementById("div-button").addEventListener("click", function() {
  ud('/');
});
document.getElementById("back-button").addEventListener("click", function() {
  back();
});
document.getElementById("clear-button").addEventListener("click", function() {
  clear();
});
document.getElementById("equals-button").addEventListener("click", function() {
  answer();
});
EN

回答 1

Stack Overflow用户

发布于 2018-07-01 01:00:19

当用户单击相等时,将最后一个操作(例如“+ 2")保存在某个变量中。因此,当他再次单击时,只需将保存的值附加到display中的字符串。

代码语言:javascript
复制
var lastOperation = null;

function answer() {
    if (eval(disp.innerHTML) == disp.innerHTML) {
        // apply the last operation to displayed number
        disp.innerHTML = disp.innerHTML + (lastOperation ? lastOperation[0] : '');
    }
    // find the last operation + | - | * | /
    lastOperation = disp.innerHTML.split(new RegExp('(\\+|\\-|\\*|/).*$'));
    c = eval(disp.innerHTML);
    disp.innerHTML = c;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51116630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档