using System.Linq.Expressions;
public static void Main()
string expressionStringDefault = "(1+Actual)*10%/ABS(1+Target)*72%";
char[] delimiters = new char[] { '(', ')', '+', '/', '*'};
string[] components = expressionStringDefault.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
foreach (var component in components)
if(component.Contains("%"))
Console.WriteLine(component.Replace("%",""));
Decimal a = Convert.ToInt32(component.Replace("%",""));
Decimal b = Convert.ToDecimal(a/100);
Console.WriteLine("int b "+b);
expressionStringDefault = expressionStringDefault.Replace(component,percentage.ToString());
Console.WriteLine(component);
Console.WriteLine(expressionStringDefault);
string expressionString = expressionStringDefault.Replace("ABS","Math.Abs");
Console.WriteLine($"components: {components[5]}");
double result = Math.Round((EvaluateExpression(expressionString, actual, target) * weight),2);
Console.WriteLine($"Result: {result}");
static double EvaluateExpression(string expressionString, double actual, double target)
var actualParam = Expression.Parameter(typeof(double), "Actual");
var targetParam = Expression.Parameter(typeof(double), "Target");
var expression = System.Linq.Dynamic.Core.DynamicExpressionParser.ParseLambda(
new[] { actualParam, targetParam },
var compiledExpression = (Func<double, double, double>)expression.Compile();
return compiledExpression(actual, target);