自定义公式计算

思路,关键字段可以写死或是以字典的形式存在;这个就是关键字段。

然后保存自定义公式,我是以生产一个中文公式(字段中文名),然后按中文公式生产英文的公式(字段名),然后保存公式所引用的字段(英文名,以逗号分隔,换行符,这里只是用来区分字段),保存前先测试算下公式。

最后上代码,添加引用

/// <param name="model">数据</param>

/// <param name="formual">公式</param>
/// <param name="fields">字段集合,以逗号分隔</param>
private decimal ProcessData<T>(T t, string formual, string fields)
{
       MSScriptControl.ScriptControl scp = new MSScriptControl.ScriptControl();
       scp.Language = "JavaScript";
       StringBuilder sb = new StringBuilder();
        //下面的变量你自己设计
       //sb.Append("var e=9;");
       ProcessVariables(t, sb, fields);
       scp.ExecuteStatement(sb.ToString());//加入脚本
       //string formula = "Math.sqrt(a+b)*c*Math.pow(d,3)/e";//公式
       //formual;公式
       return (decimal)scp.Eval(formual);//计算结果

}

private void ProcessVariables<T>(T t, StringBuilder sb, string fields)
{
      foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(typeof(T)))
      {
           if (fields.Contains(pd.Name))//存在该字段就赋值
           {
               sb.Append(string.Format("var {0}={1};", pd.Name, pd.GetValue(t)));
           }
     }
}

原文地址:https://www.cnblogs.com/shuaimeng/p/9722332.html

时间: 2024-10-29 10:42:22

自定义公式计算的相关文章

C#中另类自定义公式计算 字符串转换为计算公式,并得出计算结果【转载】

1 //方法一 利用DataTable中的Compute方法 例如:1*2-(4/1)+2*4=6 2 string formulate = string.Format("{0}*{1} - {2}/{3} +{1}*{2}", 1, 2, 4, 1); 3 DataTable dt = new DataTable(); 4 Response.Write(dt.Compute(formulate, "").ToString()); 5 6 Response.Writ

.NET实现Office Excel自定义公式 广泛应用于报表与数据分析

在管理软件开发的功能点中,有相当一部分功能是与Excel做数据交互,产生Excel 数据报表.如果Excel报表的数据计算方法很有规律可循,则可以通过自定义公式来解决.比如常见的资产负债表,利润表,取数都非常有规律. Excel DNA是一套用.NET框架实现的Excel自定义公式引擎,互联网上有很多Excel财务方面的报表是基于此技术实现.Excel DNA完全开放源代码,可到网上下载它的完整源代码和例子工程,地址是https://exceldna.codeplex.com    开发自定义公

VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式

原文:VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式 Excel包含很多公式,如数学.日期.文本.逻辑等公式,非常方便,可以灵活快捷的对数据进行处理,达到我们想要的效果.Excel的内置公式虽然强大,但是在ERP等系统中,往往需要进行很多业务上的计算,如收发存台账.指定年.月.部门的消耗查询等,都是需要从数据库中查询的,且和业务紧密相连.这时仅仅依靠Excel的内置公式就不够了,需要添加自定义的公式来进行这些业务计算. 测试代码下载 本系列所有测试代码均在Visual St

用python实现计算1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))类似的公式计算

作业需求: 开发一个简单的python计算器 1.实现加减乘除及拓号优先级解析 2.用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式(不能调用eval等类似功能偷懒实现),运算后得出结果,结果必须与真实的计算器所得出的结果一致 上图是实现的逻辑思路图,下面是对上图的分析: 整体的思想就是先匹配最

c语言详解  蔡勒(Zeller)公式计算某一天是星期几  极其方便

—— 蔡勒(Zeller)公式 历史上的某一天是星期几?未来的某一天是星期几?关于这个问题,有很多计算公式(两个通用计算公式和一些分段计算公式),其中最著名的是蔡勒(Zeller)公式.即w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1 公式中的符号含义如下,w:星期:c:世纪-1:y:年(两位数):m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1.2月要看作上一年的13.14月来计算,比如2003年1月1日要看作2002年的13月1日来计算):d:日:[ ]代

【Zeller公式计算星期几】HDU 6112 今夕何夕

acm.hdu.edu.cn/showproblem.php?pid=6112 [思路] 公式计算即可,注意特判2月29号 Zeller公式里,计算出的week不能直接模7,要保证week是正数 [AC] 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 #include<algorithm> 6 #include<cmath&g

基姆拉尔森公式--计算日期周几

基姆拉尔森公式计算日期周几 #include <iostream> using namespace std; string week[] ={"Mon","tue","Wen","Thu","Fri","Sat","Sun"}; int main(){ int y,m,d; while(cin>>y>>m>>d){ if

使用Machin公式计算

使用Machin公式计算,并使用百亿进制+末项位数控制,这里可算出数万位(比最简PI快80倍),源代码约40行,在本网页中. 计算公式 PI=16arctg(1/5)-4arctg(1/239),其中arctg(x)=x-x^3/3+x^5/5-x^7/7+x^9/9... 令X=x^2并提取公因式得:arctg(x)=x(1-X(1/3-X(1/5-X(1/7-X(…,只需迭代b=1/(2n+1)-b*X,n=N,…,3,2,1,0,最后算b*x即得arctg(x) 要想快速计算几十万位或几百

WPF实现强大的动态公式计算

数据库可以定义表不同列之间的计算公式,进行自动公式计算,但如何实现行上的动态公式计算呢?行由于可以动态扩展,在某些应用场景下将能很好的解决实际问题. 1.VS2012新建一个WPF应用程序WpfApp_DynCalc,并添加一个类DynCalc.cs,如下图: 2.编辑MainWindow.xaml,代码如下: 1 <Window x:Class="WpfApp_DynCalc.MainWindow" 2 xmlns="http://schemas.microsoft.