5+4-2+7*3/2 我要计算这个字符串,先乘除后加减 不用eval怎么写 各位大神给个思路。
解决方案 »
- 如何实现图片相关信息效果
- 二级联动 1托3 写法
- 求一个例子,各位大侠请伸伸援手。。。
- Math.sqrt(2)的问题..........求解
- 相关的JS提取本地时间为隐藏域
- 使用MzTreeView时,如何在添加一个树节点的同时,添加一个checkbox在节点前面
- js获取repeater的行数
- 如何用jquery获取input和select和textarea元素
- 急!!!!!屏蔽页面后退的代码是什么?
- 怎样才能不被谷歌解码呢?
- jstree如何实现从dom元素拖放到数的节点上?
- 求科普求赐教!!!像美团外卖这种app是怎么根据用户输入的食物中自动匹配最近的商家地址的?有什么自动匹配的算法吗?还是百度地图api自动定位的??
var expressionCalc = (function () { var operatorTable; operatorTable = {
'-': {
priority: 1,
handle: function (a, b) {
return a - b;
}
},
'+': {
priority: 1,
handle: function (a, b) {
return a + b;
}
},
'*': {
priority: 2,
handle: function (a, b) {
return a * b;
}
},
'/': {
priority: 2,
handle: function (a, b) {
return a / b;
}
}
}; function postfix(expression) {
var i, op, stack, output, n, char; stack = [];
output = []; //去空白
expression = expression.replace(/\s/g, ''); function getn() {
var n, c; n = ''; while ((c = expression[i]) && /\w/.test(c)) {
n += c;
i++;
} i--; return n;
}
function popstack(tobrace) {
var o; while (stack.length) {
if (tobrace) {
o = stack.pop();
if (o == '(') {
break;
}
output.push(o);
} else if (operatorTable[stack[stack.length - 1]] && operatorTable[stack[stack.length - 1]].priority >= op) {
output.push(stack.pop());
} else {
break;
}
}
} for (i = 0; i < expression.length; i++) {
char = expression[i]; if (char == ")") {
popstack(true);
} else if (char == "(") {
stack.push(char);
} else if (operatorTable[char] && (op = operatorTable[char].priority)) {
popstack();
stack.push(char);
} else {
output.push(getn());
}
} op = -1;
popstack(); return output;
} function calcStack(stack) { var n1, n2, r, output; if (!stack.length) return; output = []; for (i = 0; i < stack.length; i++) {
n = stack[i]; if (operatorTable[n]) {
n2 = new Number(output.pop());
n1 = new Number(output.pop()); output.push(operatorTable[n].handle(n1, n2));
} else {
output.push(stack[i]);
}
} return output[0];
} return function (expression) {
return calcStack(postfix(expression));
}
})();console.log(expressionCalc('5+4-2+7*3/2')); //17.5