【问题标题】:C#, How to compute an operation stringC#,如何计算操作字符串
【发布时间】:2017-05-07 03:55:21
【问题描述】:

我有一个这样的字符串

str = "4975 + 10 * (LOG(250.6)) - 321.2"

我想计算这个操作的结果。 有什么办法可以做到吗?

// my operation just includes some of operators (,), +, -, *, / , ., 0-9, LOG
// '.' is used for double number

【问题讨论】:

  • @Rob 我不认为这是 OP 正在考虑的捷径 :)
  • 不,没有捷径可走,您必须解析字符串或提供允许某人键入数字并按下对数、减法、加法按钮的用户界面,也就是计算器界面您根本不必解析字符串
  • 你可以查看这个帖子stackoverflow.com/questions/333737/…
  • 嗯,该副本已过时并且已关闭,作为专门要求编译的问题的欺骗。我认为这值得一个新的开始。重新开放。
  • @HenkHolterman 我不知道,这个问题的答案将是人们要么建议他们最喜欢的词法/解析库,要么建议 OP 自己编写。无论哪种方式,我都同意这个问题已经结束。

标签: c#


【解决方案1】:

我相信这就是您正在寻找的。

使用这个库将帮助您以字符串格式执行数学运算

添加这个包

安装包DynamicExpresso.Core

代码示例

public static void Main(string[] args)
        {
            var interpreter = new Interpreter();
            var result = interpreter.Eval("4975 + 10 * (LOG(250.6)) - 321.2".Replace("LOG", "Math.Log"));

            Console.WriteLine("result=> " + result);
            Console.ReadKey();
        }

结果=> 4709.03858042462

链接库https://github.com/davideicardi/DynamicExpresso

【讨论】:

  • 谢谢。这真的很有帮助。我什至找到了我真正需要的功能(使用变量和参数)。
【解决方案2】:

也在这里回答:

https://stackoverflow.com/a/2859130/1043824

试试DataTable.Compute

我没有 .net 盒子,所以我无法确定它是否可以做log,但我已经将它用于长代数表达式。

基本上是这样的:

DataTable dt = new DataTable();
var ans = dt.compute("5 + (7 - 9) / 3");

【讨论】:

  • 是的,但是 DataTable 是有限的,在 dotnet core 中不可用。
  • 它适用于双数和“+ - * /”运算符。但它不适用于 Log。我得到一个像这样的异常:未处理的异常:System.Data.EvaluateException:表达式包含未定义的函数调用 Log()。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2015-02-10
相关资源
最近更新 更多