首页 > 其他分享 >NCalc 学习笔记 (一)

NCalc 学习笔记 (一)

时间:2023-06-20 09:47:00浏览次数:37  
标签:NCalc Assert Evaluate args 笔记 学习 Debug new Expression

简单表达式

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

 

标签:NCalc,Assert,Evaluate,args,笔记,学习,Debug,new,Expression
From: https://www.cnblogs.com/shijiehaiyang/p/17492763.html

相关文章

  • NCalc 学习笔记 (四)
    值值是代表具体元素的一个终端口令(Avalueisaterminaltokenrepresentingaconcreteelement),它可以是:+整数(Int32)+浮点数(Decimal)(与Double相比,有更高的精度和更小的取值范围)+科学计数(Double)+日期(DateTime)+布尔值(bool)+字符串(String)+函数+参数整数123......
  • NCalc 学习笔记 (三)
    运算符毋庸置疑,表达式支持各种基本的运算符。各种运算符的优先级由高到低如下: 原子运算符(,)单目运算符!,not,-,~(按位取反)幂次运算符(原文作者遗漏了,他写了位运算符&,|,^(xor),<<,>>)乘除运算符*,/,%加减运算符+,-关系运算符=,==,!=,<>,<,<=,......
  • NCalc 学习笔记 (五)
    函数NCalc本身已经实现的函数列表如下:函数名描述用例用例结果Abs返回绝对值Abs(-1)1MAcos返回余弦值对应的角度Acos(1)0dAsin--dAtan--dCeiling向上取整Ceiling(1.5)2dCos--dExp相当于e的X次幂Exp(0)1dFloor向下取整Flo......
  • NCalc 学习笔记 (六)
    参数静态参数静态参数可以在表达式求值前定义。用方括号括起来表示为静态参数。可以通过Expression对象中名为 Parameters 的字典来访问静态参数。Expressione=newExpression("2*[x]^2+5*[y]");e.Parameters["x"]=5;e.Parameters["y"]=1;Console.Writ......
  • uniapp-黑马优选学习03
    01.uni数字组件:uni-number-box02.在flex布局中,如果子元素未铺满的处理>>情形:   >>处理方式:为相应的子元素,配置flex=103.商品信息的滑动删除>>组件:uni-swipe-action和 uni-swipe-action-item>>注意:options已经修改为:left-op......
  • Python学习笔记
    函数调试相关F8stepover单步执行会把函数调用视作一行,直接执行,不会进入函数内部F7stepinto也可以单步执行,如果是函数,会进入函数内部函数注释使用三对引号参数相关形参和实参:定义函数时使用的参数是形参,调用函数时传入的函数是实参局部变量和全局变量:局部变量是在函......
  • 《Linux命令行与shell脚本编程大全》研读笔记
    目录命令总结进程相关环境变量相关第六章Linux环境变量命令总结进程相关命令名称作用举例psProcessStatus,用来列出系统中当前运行的那些进程ps-ftop动态地显示进程信息top环境变量相关命令名称作用举例env列出全局环境变量env......
  • 黑马程序员Java教程学习笔记(一)
    文章目录黑马程序员Java学习笔记Java版本Java语言的跨平台原理JRE和JDKJDK的下载和安装HelloWorld案例注释关键字常量数据类型标识符类型转换运算符字符"+"操作字符串"+"操作赋值运算符自增自减运算符关系运算符逻辑运算符三元运算符案例:两只老虎案例:三个和尚数据输入案例:三个和尚......
  • 黑马程序员Java教程学习笔记(五)
    文章目录黑马程序员Java教程学习笔记(五)日期时间:Date、SimpleDateFormat、CalendarJDK8开始新增日期API包装类正则表达式Arrays类选择排序、二分查找Lambda表达式集合概述、Collection集合的体系特点Collection常用API、遍历方式、存储自定义类型对象常见数据结构List系列集合、集......
  • 6月19日学习总结
    今日主要学习了Java中的部分集合,如Arraylist,Collection,以及使用了集合的方法如add(),remove,get(),clear()等,同时了解了StringBuilder类(字符串缓冲区),此类能够高效处理字符串内存缓存问题,以及字符串转换方法toString()与字符串拼接或增加append()方法,也了解了迭代器Iterator,学会了......