12

Is there an easy way to evaluate strings like "(4+8)*2" So that you'd get the int value of 24?

Or is there a lot of work needed to get this done...?

1

3 Answers 3

46

Someone else added this and then it got deleted. I thought it was pretty cool because no 3rd party libraries required.

class Program
    {

        static void Main(string[] args)
        {
            Console.WriteLine(Evaluate("(4+8)*2"));
            Console.ReadKey();
        }

        public static double Evaluate(string expression)
        {
            DataTable table = new DataTable();
            table.Columns.Add("expression", typeof(string), expression);
            DataRow row = table.NewRow();
            table.Rows.Add(row);
            return double.Parse((string)row["expression"]);
        }

    } 
Sign up to request clarification or add additional context in comments.

9 Comments

In my use, this solution was about 1.5x faster than NCalc, while being equally stable (at least for what I was doing). It handled boolean expressions just as same as NCalc. This should be advertised more.
This doesn't handle powers or square roots.
this solution is perfect for simple expressions as i need it. Thank you for re-posting it.
Meanwhile i found a problem: numbers with fractions (like 1.5) are parsed with point (.) being the only allowed separator. is this correct? Can i rely on this in every language? in german the standard separator for fractions is komma (,). But when i use this, the parsing fails.
zreptil: you have to assure that all number values within your expression are written to string with the InvariantCulture --> i.e.: myDouble.ToString(System.Globalization.CultureInfo.InvariantCulture)
|
20

Use Ncalc:

Expression e = new Expression("(4+8)*2");
Debug.Assert(24 == e.Evaluate());   

http://ncalc.codeplex.com/

Also, this question had been previously asked and has some interesting answers including Ncalc : Evaluating string "3*(4+2)" yield int 18

Comments

5

You need a Math Expression Parser for that. Below are resources on that:

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.