C# 使用指数(1+;2-3)*4^5=答案对字符串上生成的数学表达式求值

C# 使用指数(1+;2-3)*4^5=答案对字符串上生成的数学表达式求值,c#,C#,我在一个字符串上生成了一个数学表达式,并用它来求值。它可以计算基本运算符和括号,这很好,但我不能用它来计算带指数的字符串。e、 g.1+2-5^7 string a = "2+3^4-2"; int result; ExpressionEvaluator e = new ExpressionEvaluator(); var mathExpressionResult = e.Evaluate(expression); result = (int)mathExpressionResult

我在一个字符串上生成了一个数学表达式,并用它来求值。它可以计算基本运算符和括号,这很好,但我不能用它来计算带指数的字符串。e、 g.
1+2-5^7

string a = "2+3^4-2";
int result;

ExpressionEvaluator e = new ExpressionEvaluator();     
var mathExpressionResult = e.Evaluate(expression);
result = (int)mathExpressionResult;
我预计结果是81,但实际输出是7

有没有办法让这起作用?有其他选择吗?

这给了我一个81

using System;
using CodingSeb.ExpressionEvaluator;                    
public class Program
{
    public static void Main()
    {
      string expression ="2 + Pow(3, 4) - 2";

        ExpressionEvaluator evaluator = new ExpressionEvaluator();

        Console.WriteLine("Result "+ evaluator.Evaluate(expression));
    }
}
这给了我一个81

using System;
using CodingSeb.ExpressionEvaluator;                    
public class Program
{
    public static void Main()
    {
      string expression ="2 + Pow(3, 4) - 2";

        ExpressionEvaluator evaluator = new ExpressionEvaluator();

        Console.WriteLine("Result "+ evaluator.Evaluate(expression));
    }
}

找到了答案!首先,我认为“2+Pow(3,4)-2”是错误的,因为我不断地得到无效的例外。然后在稍作休息并再次查看我的代码后,发现问题是
result=(int)mathExpressionResult
Pow(x,y)
返回一个双精度值,因此它应该是
result=(double)mathExpressionResult

string a = "2+ Pow(3,4)-2";
double result;

ExpressionEvaluator e = new ExpressionEvaluator();     
var mathExpressionResult = e.Evaluate(expression);
result = (double)mathExpressionResult;

谢谢你的其他答案

找到了答案!首先,我认为“2+Pow(3,4)-2”是错误的,因为我不断地得到无效的例外。然后在稍作休息并再次查看我的代码后,发现问题是
result=(int)mathExpressionResult
Pow(x,y)
返回一个双精度值,因此它应该是
result=(double)mathExpressionResult

string a = "2+ Pow(3,4)-2";
double result;

ExpressionEvaluator e = new ExpressionEvaluator();     
var mathExpressionResult = e.Evaluate(expression);
result = (double)mathExpressionResult;

谢谢你的其他答案

,看起来语法是
Pow(x,y)
而不是
x^y
;“随机生成”和Unity3D对这个问题没有任何影响。是的。但我想知道的是,如果字符串值是正确生成的,那么如何在代码中使用它,所以你要问的是如何将“2+3^4-2”转换为“2+Pow(3,4)-2”?@canton7如果观察到运算符优先级,我希望是
2+Pow(3,4)-2
,看起来语法是
Pow(x,y)
不是
x^y
。这个问题似乎有两个不相关的部分可以删除;“随机生成”和Unity3D对这个问题没有任何影响。是的。但我想知道的是,如果字符串值是正确生成的,那么如何在我的代码中使用它,所以你要问的是如何将“2+3^4-2”转换为“2+Pow(3,4)-2”?@canton7如果观察到运算符优先级,我希望是
2+Pow(3,4)-2