-
Notifications
You must be signed in to change notification settings - Fork 74
Home
James Cane edited this page May 19, 2017
·
10 revisions
NCalc is a mathematical expressions evaluator in .NET. NCalc can parse any expression and evaluate the result, including static or dynamic parameters and custom functions.
var e = new Expression ("2 + 3 * 5");
Exciting news! NCalc has moved to GitHub due to the impending closure of CodePlex and has acquired a new maintainer. I plan to initially make a number of performance improvements to NCalc, before adding some new functionality over the coming months.
Please send me a message if you have ideas, comments or requests for functionality.
Debug.Assert(123456 == new Expression("123456").Evaluate()); // integers`
Debug.Assert(new DateTime(2001, 01, 01) == new Expression("#01/01/2001#").Evaluate()); // date and times`
Debug.Assert(123.456 == new Expression("123.456").Evaluate()); // floating point numbers`
Debug.Assert(true == new Expression("true").Evaluate()); // booleans`
Debug.Assert("azerty" == new Expression("'azerty'").Evaluate()); // strings
Debug.Assert(0 == new Expression("Sin(0)").Evaluate());
Debug.Assert(2 == new Expression("Sqrt(4)").Evaluate());
Debug.Assert(0 == new Expression("Tan(0)").Evaluate());
Expression e = new Expression("SecretOperation(3, 6)");
e.EvaluateFunction += delegate(string name, FunctionArgs args)
{
if (name == "SecretOperation")
args.Result = (int)args.Parameters[0].Evaluate() + (int)args.Parameters[1].Evaluate();
};
Debug.Assert(9 == e.Evaluate());`
Debug.Assert("経済協力開発機構" == new Expression("'経済協力開発機構'").Evaluate());
Debug.Assert("Hello" == new Expression(@"'\u0048\u0065\u006C\u006C\u006F'").Evaluate());
Debug.Assert("だ" == new Expression(@"'\u3060'").Evaluate());
Debug.Assert("\u0100" == new Expression(@"'\u0100'").Evaluate());`
Expression e = new Expression("Round(Pow([Pi], 2) + Pow([Pi2], 2) + [X], 2)");
e.Parameters["Pi2"] = new Expression("Pi * [Pi]");
e.Parameters["X"] = 10;
e.EvaluateParameter += delegate(string name, ParameterArgs args)
{
if (name == "Pi")
args.Result = 3.14;
};
Debug.Assert(117.07 == e.Evaluate());