NCalc 學習筆記 (一)

簡易使用說明

【子頁連接】
- 簡介
- 操做符
-
- 函數
- 參數segmentfault

簡單表達式

Expression e = new Expression("2 + 3 * 5");
Debug.Assert(17 == e.Evaluate());

計算 .NET 數據類型

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()); // floatinpoint numbers
Debug.Assert(true == new Expression("true").Evaluate()); // booleans
Debug.Assert("azerty" == new Expression("'azerty'").Evaluate()); // strings

處理 System.Math 所支持的函數

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());

處理 Unicode 字符

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());

參考連接

NCalc - Mathematical Expressions Evaluator for .NET
A Calculation Engine for .NET
State of the Art Expression Evaluation函數

相關文章
相關標籤/搜索