我正在编写一个单行计算器,它具有基本功能(+ - */)。我以前这样做过,但现在我总是得到错误的答案,而且我找不到我的错误。这是我的代码:
var seq = document.getElementById('sequence').value;
var allNums = [];
var i = 0, allSigns = [];
var currentNums = "";
for (i = 0; i< seq.length; i++)
{
if (seq[i] != "+" && seq[i] != "-" && seq[i] != "*" && seq[i] != "/")
{
currentNums+=seq[i];
}
else
{
allNums.push(Number(currentNums));
currentNums="";
allSigns.push(seq[i]);
}
}
allNums.push(Number(currentNums));
var result = 0;
for (i = 0; i < allNums.length; i++)
{
if (allSigns[i] == '+')
result+=Number(allNums[i]);
else if (allSigns[i] == "-")
result-=Number(allNums[i]);
else if (allSigns[i] == "*")
result*=Number(allNums[i]);
else if (allSigns[i] == "/")
result/=parseInt(allNums[i]);
else
{
alert("The result is: " + result);
break;
}
}
所有这些代码都在一个名为“calculate”的函数中。该函数由按钮触发,序列来自输入。
最佳答案
虽然这个简单的计算器有很多缺点,这些缺点可能是也可能不是问题(取决于您想用它做什么),但一个问题是您的 allSigns
数组值不是与正确的 allNums
数组值关联。
看看this example 。在控制台中,您可以看到与6
关联的符号是加号,而与2
关联的运算符未定义。当然,这不是我们想要的。我们想要的是将两个加到六个。
解决此问题的方法是始终从一开始就将 allNums[0]
添加到 result
中。这设置了我们的结果可以由其后的任何内容进行操作。在本例中,我们从 6
开始。
接下来我们需要做的是将 allSigns
的每个值的位置向下移动一位,将运算符与它之后的值(而不是 )对齐>之前。因此,在上面的示例中,我们将 +
与 2
关联,因此它将 2 添加到 6。
This JSFiddle显示针对此特定情况的修复。
关于javascript - JS计算器问题。错误的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16405717/