首页 > Web开发 > 详细

表达式计算开源组件(NCalc.NetCore)

时间:2020-06-19 09:12:40      阅读:155      评论:0      收藏:0      [点我收藏+]

首先,这款组件是开源的,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,然后再依次解析参数。
需要注意的是每个函数返回的值类型必须一致,否则在做四则运算时就会报错了,这个很好理解。

技术分享图片

表达式计算开源组件(NCalc.NetCore)

原文:https://www.cnblogs.com/zhanwei103/p/13154291.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!