首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串中的数学表达式: NCalc的替代方案

字符串中的数学表达式: NCalc的替代方案
EN

Stack Overflow用户
提问于 2017-04-05 13:59:07
回答 1查看 2.1K关注 0票数 0

我需要从文件中读取数学表达式并评估它的价值。示例表达式格式如下:

  • "5"常数
  • "3.1415 * 0.25" -常数表达式
  • "{0} - 50" -带有值占位符的表达式(String.Format())
  • "Abs({0} - 50)" --就像up一样,但是有数学函数

到目前为止,我一直在使用NCalc,它工作得很好,直到它不得不处理如下的表达式:

  • "3.0 * Abs({0} + 34)"

不幸的是,在上面的例子中,下面的代码的结果是:

代码语言:javascript
复制
var value = ReadValueFromSomewhere(); // Lets say it returns 125.75
var exprStr = ReadExpression(); // returns: "3.0 * Abs({0} + 34)"
var toEval = String.Format(exprStr, value);
var result = new NCCalc.Expression(toEval).Evaluate()

例外情况如下:

System.InvalidOperationException 运算符'*‘不能应用于'double’和‘十进制’类型的操作数(object,object) NCalc.Domain.EvaluationVisitor.Visit(NCalc.Domain.BinaryExpression) NCalc.Domain.BinaryExpression.Accept(NCalc.Domain.LogicalExpressionVisitor) NCalc.Expression.Evaluate()

看起来Abs()方法返回十进制,而NCalc无法处理doubledecimal之间的计算(可能是bug?)。因此,我想问一下,我可以使用哪些替代库而不是NCalc呢?或者,除了表达之外,还有其他解决办法:

  • "Abs(3.0) * Abs({0} + 34)"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-08 19:21:18

你所说的“带值占位符的表达式”是什么意思?你能给出更具体的例子吗?您可以尝试mXparser --它适用于Java和.NET。

使用示例:

代码语言:javascript
复制
Expression e = new Expression("3.1415 * 0.25");
double v = e.calculate();

跟着mXparser教程走。

问候

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43233375

复制
相关文章

相似问题

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