zoukankan      html  css  js  c++  java
  • 表达式计算开源组件(NCalc.NetCore)

    首先,这款组件是开源的,NCalc是.net中的一个数学表达式求值程序。NCalc可以解析任何表达式并计算结果,包括静态或动态参数和自定义函数。

    Nuget安装依赖,如下:

    简单表达式:

    Expression e = new Expression("2 + 3 * 5");
    var result=e.Evaluate();
    

    支持.NET数据类型

    支持int,date,float,bool,string等数据格式

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

    自定义计算表达式

    public static object Calcuate(string expression,Snapshot snapshot,Status status)
    {
        Expression e = new Expression(expression);
        e.EvaluateFunction += delegate (string name, FunctionArgs args)
        {
            if (name.Equals("Tag"))
            {
                string tagName = args.Parameters[0].Evaluate().ToString();
                RTData rtData=snapshot.ReadTag(tagName);
                args.Result = rtData.Value;
            }
            else if (name.Equals("Loop"))
            {
                string loopName = args.Parameters[0].Evaluate().ToString();
                args.Result = status.GetLoopValue(loopName);
            }
        };
        return e.Evaluate();
    }
    

    其中Tag,Loop就是自定义函数,可以根据自身逻辑进行编写。
    调用代码基本是这样,这是一个递归调用的过程,先解析出Tag和Loop,然后再依次解析参数。
    需要注意的是每个函数返回的值类型必须一致,否则在做四则运算时就会报错了,这个很好理解。

  • 相关阅读:
    Security+考试通过心得
    Splunk Power User认证
    Splunk笔记
    关于工作
    智能合约安全-parity多重签名钱包安全漏洞
    kickstart构建Live CD 添加文件问题
    Local Authentication Using Challenge Response with Yubikey for CentOS 7
    计算Linux权限掩码umask值
    IntelliJ IDEA 常用快捷键
    关于常量池-----小例子
  • 原文地址:https://www.cnblogs.com/zhanwei103/p/13154291.html
Copyright © 2011-2022 走看看