我正在尝试转换字符串以执行算术表达式但获取格式表达式。我想要计算表达式和最终答案。
// original value
string text = @"4'-8"x5/16"x20'-8 13/16";
string path = text.Replace("'", "*12").Replace("-", "+").Replace("x", "+").Replace(" ", "+").Replace(@"""", "");
System.Console.WriteLine("The original string: '{0}'", text);
System.Console.WriteLine("The final string: '{0}'", path);
Console.WriteLine();
decimal d = decimal.Parse(path, CultureInfo.InvariantCulture);
Console.WriteLine(d.ToString(CultureInfo.InvariantCulture));
// after converting got this value in debug
//'4*12+8+5/16+20*12+8+13/16'
答案 0 :(得分:3)
您可以使用DataTable
类来评估数学表达式字符串,使用Compute()
方法,将String.Empty
作为第二个参数传递。
var parsingEngine = new DataTable(); //in System.Data
int i = (int)parsingEngine.Compute("3 + 4", String.Empty);
decimal d = (decimal)parsingEngine.Compute("3.45 * 76.9/3", String.Empty);
请注意Compute
返回一个对象,并且必须小心根据数学表达式应该产生的内容将其强制转换为适当的类型。
答案 1 :(得分:0)
不幸的是,.NET没有内置任何可以评估数学表达式字符串的内容。您需要使用第三方库,例如NCalc。
然后你就可以在你的代码中使用它了
// original value
//string text = System.IO.File.ReadAllText(@"4'-8"x5/16"x20'-8 13/16"); This needs to be a filepath.
string text = @"4'-8x5/16x20'-8 13/16";
string path = text.Replace("'", "*12").Replace("-", "+").Replace("x", "+").Replace(" ", "+").Replace(@"""", "");
System.Console.WriteLine("The original string: '{0}'", text);
System.Console.WriteLine("The final string: '{0}'", path);
Expression e = new Expression(path)
Console.WriteLine(e.Evaluate);