繁体   English   中英

构建Javascript计算器

[英]Building Javascript Calculator

我正在尝试用javascript构建计算器,但遇到问题,不知道如何进行。 例如,每次有人点击1 + 1/2时,我都会创建一个数组,该数组将推送所有键入的内容,因此在该数组上方的情况下

[1, "+", 1, "/", 2];

但是,我无法弄清楚如何将该数组转换为实际的数学值。 我有一个遍历像这样的所有元素的想法:

for(var i=0; i<arrayCharacters.length ;i++){
            if(arrayCharacters[i] != "*" || arrayCharacters[i] != "/" || arrayCharacters[i] != "+" || arrayCharacters[i] != "*"){
                arrayNumbers.push(arrayCharacters.slice(0, i));
                console.log(arrayNumbers);
            }
        }

这很不完整,因为我被卡住了。 谁能帮我?

var result=eval(arrayCharacters.join(""));

您也可以手动解析表达式,但是这需要建立一棵树,因为数学不是从左到右求值的。


如果您真的想自己解析它(比eval更好),则可以使用真正从左到右的数学符号,因此它解析起来要容易得多(如@Scott建议)。 一个实现:

var stack=[];
var arrayCharacters=[1,2,"/",1,"+"];

for(var i=0;i<arrayCharacters.length;i++){

 var char=arrayCharacters[i];

 if(typeof char==="number"){
    stack.push(char);
    continue;
 }

 var op2=stack.pop()||0;
 var op1=stack.pop()||0;
 var res;

 if(char=="+"){
  res=op1+op2;
 }
 if(char=="-"){
  res=op1-op2;
 }
 if(char=="*"){
  res=op1*op2;
 }
 if(char=="/"){
  res=op1/op2;
 }

 stack.push(res);
}

var result=stack.pop();

数学语法(RPN( 1 )):

1+2 => 1 2 +
1/2+3 => 1 2 / 3 +
1+2/3 => 1 2 3 / + 
(1+2)/3 => 1 2 + 3 /
1/2/3+4/5/6 => 1 2 / 3 / 4 5 / 6 / + 

http://jsbin.com/zofeqitiba/edit?console

在您的情况下,“评估”功能是一个很好的选择。 您也可以使用math.js库,该库带有功能强大的表达式解析器。

http://mathjs.org

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM