字符串中的数学表达式:NCalc 的替代品
Mathematical expression in string: Alternatives to NCalc
我需要从文件中读取数学表达式并计算它的值。示例表达式格式如下:
"5"
- 常数
"3.1415 * 0.25"
- 常量表达式
"{0} - 50"
- 带值占位符的表达式 (String.Format()
)
"Abs({0} - 50)"
- 就像 up 但有数学函数
到目前为止,我一直在使用 NCalc,它在处理如下表达式之前效果很好:
"3.0 * Abs({0} + 34)"
不幸的是,在下面代码的结果上方的示例中:
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
Operator '*' can't be applied to operands of types 'double' and 'decimal'
NCalc.Numbers.Multiply(object, object)
NCalc.Domain.EvaluationVisitor.Visit(NCalc.Domain.BinaryExpression)
NCalc.Domain.BinaryExpression.Accept(NCalc.Domain.LogicalExpressionVisitor)
NCalc.Expression.Evaluate()
似乎 Abs() 方法 returns 十进制和 NCalc 无法处理 double
和 decimal
之间的计算(可能是错误?)。所以我想问一下我可以使用哪些替代库来代替 NCalc?或者也许还有其他解决方法而不是表达式:
"Abs(3.0) * Abs({0} + 34)"
?
"expressions with value placeholders" 是什么意思?能举个更具体的例子吗?您可以尝试 mXparser - 它适用于 Java 和 .NET。
用法示例:
Expression e = new Expression("3.1415 * 0.25");
double v = e.calculate();
此致
我需要从文件中读取数学表达式并计算它的值。示例表达式格式如下:
"5"
- 常数"3.1415 * 0.25"
- 常量表达式"{0} - 50"
- 带值占位符的表达式 (String.Format()
)"Abs({0} - 50)"
- 就像 up 但有数学函数
到目前为止,我一直在使用 NCalc,它在处理如下表达式之前效果很好:
"3.0 * Abs({0} + 34)"
不幸的是,在下面代码的结果上方的示例中:
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
Operator '*' can't be applied to operands of types 'double' and 'decimal' NCalc.Numbers.Multiply(object, object) NCalc.Domain.EvaluationVisitor.Visit(NCalc.Domain.BinaryExpression) NCalc.Domain.BinaryExpression.Accept(NCalc.Domain.LogicalExpressionVisitor) NCalc.Expression.Evaluate()
似乎 Abs() 方法 returns 十进制和 NCalc 无法处理 double
和 decimal
之间的计算(可能是错误?)。所以我想问一下我可以使用哪些替代库来代替 NCalc?或者也许还有其他解决方法而不是表达式:
"Abs(3.0) * Abs({0} + 34)"
?
"expressions with value placeholders" 是什么意思?能举个更具体的例子吗?您可以尝试 mXparser - 它适用于 Java 和 .NET。
用法示例:
Expression e = new Expression("3.1415 * 0.25");
double v = e.calculate();
此致