【原创】.NET开源表达式计算组件介绍与使用

       本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html

本博客其他.NET开源项目文章目录:http://www.cnblogs.com/asxinyu/p/4329755.html

1.前言

日常开发中有很多地方使用到表达式计算,比如一个庞大灵活的人力资源管理系统中,涉及到薪酬管理,某些单位可能会经常对工资格式,计算方式进行变动,这个时候表达式计算就可以派上用场,当然还有很多地方,比如数学计算等环节中,对表达式计算的需求也挺多的。今天就像大家介绍一款开源的.NET表达式计算组件NCalc,该组件很小,但功能强大,包括了很多不同类型的表达式计算,下面就将详细介绍其功能和使用。

2.NCalc组件功能特点

首先,这款组件是开源的,开源地址在:http://ncalc.codeplex.com/ ,可以下载Dll和源代码,看看实现过程。

其次,该组件不仅支持数学表达式计算,还支持很多基础的数学函数,支持参数,以及支持逻辑运算符号。使用简单。

3.NCalc组件基本使用入门

NCalc的使用很简单,只需要初始化一个Expression对象,然后给它传入参数,调用Evaluate方法即可得到结果。下面将对NCalc支持的各种表达式计算进行一个简单的演示,包括一下内容:

1.最简单的数学运算

2.简单的逻辑运算

3.简单的参数表达式计算

4.支持数学函数运算

先看效果图:

  

再看核心代码:

 1 string[] temp = txtExpress.Text.Trim().Split(new String[] { "\r\n" },
 2     StringSplitOptions.RemoveEmptyEntries);
 3 foreach (var item in temp )
 4 {
 5     //对当前的表达式再次进行分割,若有参数,则添加参数
 6     if (item.Contains(';'))
 7     {   //第一个是表达式,后面的;号都是参数名称和参数值
 8         string[] param = item.Split (new char[]{';'},
 9                    StringSplitOptions.RemoveEmptyEntries);
10         Expression exp = new Expression(param[0]);
11         //添加参数
12         for (int i = 1; i < param.Length ; i++)
13         {
14             //等号左边是参数名,等号右边是值,输入错误检测暂时不处理
15             string[] nameValue = param[i ].Split ('=');
16             //这里注意要对值类型进行转换,否则会直接作为字符串对待,结果会有不同
17             exp.Parameters[nameValue[0]] = Convert.ToDouble( nameValue[1]);
18         }
19         //计算结果
20         txtResult.Text += (exp.Evaluate().ToString () + "\r\n");
21     }
22     else
23     {
24         string result = new Expression(item).Evaluate().ToString();
25         txtResult.Text += (result + "\r\n");
26     }
27 }

4.资源

自由发挥,有了这个基础的东西,可以做出很多小工具啊。希望对大家有用。还有更多的功能期待大家发掘。

时间: 2024-09-27 22:16:04

【原创】.NET开源表达式计算组件介绍与使用的相关文章

.NET平台开源项目速览(8)Expression Evaluator表达式计算组件使用

在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下Expression Evaluator验证组件.那里只是概述了一下,并没有对其使用和强大功能做深入研究,所以今天就通过一篇简单的文章来预览一下其强大的功能.本文曾在[原创].NET开源表达式计算组件介绍与使用一文中介绍过一个.NET平台开源的表达式计算组件NCal.不过经过比较还是这个Expression Evaluator比较强大,虽然部分功能有重叠.也都能计算常规的数学表达式.这个组件的

开源Word读写组件DocX 的深入研究和问题总结

一. 前言      前两天看到了asxinyu大神的[原创]开源Word读写组件DocX介绍与入门,正好我也有类似的自动生成word文档得需求,于是便仔细的研究了这个DocX. 我也把它融入到我的项目当中并进行了实践.工具果然牛叉,但也有一些问题,后边一并列出来.   二. DocX的基本原理      Word有一个开放的文件格式,叫做Office Open XML.Office 从2007版本开始用它.它的基本方法是将文本和格式存储成xml,把其他资源(图片等)存储成独立文件,并将其进行Z

[置顶]【原创】.NET开源压缩组件介绍与入门

       本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 1.前言 作为吉日嘎拉权限管理系统最早的一批学习版用户,学了不少东西,在群里面也结识了很多朋友,更重要的是闲余时间,大家都发布很多可靠的外包工作.这次也是由于吉日嘎拉发布了一个有关"压缩文件损坏检测"的外包任务,最早在2009年用C#很简单的使用过压缩组件,这次有了这个需求,才所以才深入研究一番,顺便有了这篇博客. 在日常项目开

【原创】开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合

       本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1.[原创]开源.NET排列组合组件KwCombinatorics使用(一)-组合生成  2.[原创]开源.NET排列组合组件KwCombinatorics使用(二)--排列生成 3.[原创]开源.NET排列组合组件KwCombinatorics使用(三)--笛卡尔积组合   前言 本文今天介绍的.NE

[置顶].NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一)

    在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下FluentValidation验证组件.那里只是概述了一下,并没有对其使用和强大功能做深入研究,所以今天以及接下去的几篇文章就专门介绍这个组件.不仅仅是它小,轻量级,优雅,而且一直在持续更新中.本人对这个感触很深是源于4年前自己在做一个数据过滤软件时,自己也设计了一套验证过滤的东西,虽然勉强能用,但太复杂了,复杂到我看到就想吐...指导我遇到了FluentValidation,彻底颠

.NET开源压缩组件介绍与入门

原文 http://www.cnblogs.com/asxinyu/archive/2013/03/05/2943696.html 1.前言 作为吉日嘎拉权限管理系统最早的一批学习版用户,学了不少东西,在群里面也结识了很多朋友,更重要的是闲余时间,大家都发布很多可靠的外包工作.这次也是由于吉日嘎拉发布了一个有关"压缩文件损坏检测"的外包任务,最早在2009年用C#很简单的使用过压缩组件,这次有了这个需求,才所以才深入研究一番,顺便有了这篇博客. 在日常项目开发过程中,操作Zip或者RA

【原创】开源.NET排列组合组件KwCombinatorics使用(一)—组合生成

       本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1.[原创]开源.NET排列组合组件KwCombinatorics使用(一)-组合生成  2.[原创]开源.NET排列组合组件KwCombinatorics使用(二)--排列生成 3.[原创]开源.NET排列组合组件KwCombinatorics使用(三)--笛卡尔积组合 前言 本文今天介绍的.NET开

【原创】开源.NET排列组合组件KwCombinatorics使用(二)——排列生成

       本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1.[原创]开源.NET排列组合组件KwCombinatorics使用(一)-组合生成  2.[原创]开源.NET排列组合组件KwCombinatorics使用(二)--排列生成 3.[原创]开源.NET排列组合组件KwCombinatorics使用(三)--笛卡尔积组合 前言 本文今天介绍的.NET开

.NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一)

原文:.NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一)     在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下FluentValidation验证组件.那里只是概述了一下,并没有对其使用和强大功能做深入研究,所以今天以及接下去的几篇文章就专门介绍这个组件.不仅仅是它小,轻量级,优雅,而且一直在持续更新中.本人对这个感触很深是源于4年前自己在做一个数据过滤软件时,自己也设计了一套验证过滤的东西,虽然勉强