【发布时间】:2020-09-27 07:31:17
【问题描述】:
如何接受输入字段中的公式来计算值?
比如"(a+b)/100"、"(a*b)/300""(b/a)"等
结果应该是计算值。所以,给定A = 100; B = 200;,公式是"(a+b)",结果应该是300。
【问题讨论】:
-
你可以使用
eval()
标签: javascript calculator calc
如何接受输入字段中的公式来计算值?
比如"(a+b)/100"、"(a*b)/300""(b/a)"等
结果应该是计算值。所以,给定A = 100; B = 200;,公式是"(a+b)",结果应该是300。
【问题讨论】:
eval()
标签: javascript calculator calc
你可以使用eval,其实不推荐。在函数内创建一个对象,其中操作符名称是键,符号是值,例如 + 或 *。在调用函数时,传递一个具有两个值和运算符的对象。
function doCalculation({
val1,
val2,
operation
}) {
const obj = {
add: '+',
multiply: '*'
}
return parseInt(eval(`${val1}${obj[operation]}${val2}`), 10) / 100
}
console.log(doCalculation({
val1: 100,
val2: 200,
operation: 'add'
}))
【讨论】:
我建议使用现有的库之一来解析和评估方程。
在npm 上有很多可用的。
例如expr-eval:
const parser = new exprEval.Parser();
const expr = parser.parse("(a+b)/100");
console.log(expr.evaluate({ a: 100, b: 200 })); // 3
console.log(expr.evaluate({ a: 200, b: 200 })); // 4
<script src="https://unpkg.com/expr-eval@1.2.2/dist/bundle.min.js"></script>
这不仅比基于 eval 的方法更健壮,而且与 javascript 相比,它还使用了更面向数学的语法。
【讨论】: