求个公式解析源码 求个公式解析源码 只需要支持 + - * / () ,不需要支持函数。用于工资的计算的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 DataTable _Talbe = new DataTable(); string _Value = new DataTable().Compute("1+1+1*9+(1+1)", "").ToString(); 这是个方法这个问题已经有过讨论了,有很多方法,结果看这里http://topic.csdn.net/u/20090701/22/f985c795-66d0-4567-8882-48de3964c428.html DataTable.Compute()方法說明如下计算用来传递筛选条件的当前行上的给定表达式。 Object Compute (string expression,string filter)string expression="(1.5+2.5)*2/4";参考 using System;using System.Text;using System.CodeDom.Compiler;using Microsoft.VisualBasic;using System.Reflection;namespace TopWinCMS.Common.Userdefined{ /// <summary> /// 自定义公式 /// </summary> /// <res>调用例子 double a = (double)Evaluator.Eval("sin(0.2) + 5");</res> public class Evaluator { private static CodeDomProvider comp = new VBCodeProvider(); private static CompilerParameters cp = new CompilerParameters(); private static MethodInfo mi; /// <summary> /// 执行公式 /// </summary> /// <param name="expression">公式</param> /// <returns></returns> /// <res>调用例子 double a = (double)Evaluator.Eval("sin(0.2) + 5");</res> public static object Eval(string expression) { StringBuilder codeBuilder = new StringBuilder(); codeBuilder.AppendLine("Imports System"); codeBuilder.AppendLine("Imports System.Math"); codeBuilder.AppendLine("Imports Microsoft.VisualBasic"); codeBuilder.AppendLine(); codeBuilder.AppendLine("Public Module Mode"); codeBuilder.AppendLine(" Public Function Func() As Object"); codeBuilder.AppendLine(" Return " + expression); codeBuilder.AppendLine(" End Function"); codeBuilder.AppendLine("End Module"); cp.ReferencedAssemblies.Add("System.dll"); cp.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll"); cp.GenerateExecutable = false; cp.GenerateInMemory = true; string code = codeBuilder.ToString(); CompilerResults cr = comp.CompileAssemblyFromSource(cp, code); if (cr.Errors.HasErrors) { return null; } else { Assembly a = cr.CompiledAssembly; Type t = a.GetType("Mode"); mi = t.GetMethod("Func", BindingFlags.Static | BindingFlags.Public); return mi.Invoke(null, new object[0]); } } }}常用的数学计算全部OK asp.net 链接加密了的access数据库报:找不到可安装的 ISAM。 同一页面打开两次的更新问题 请高手指教:在.NET 中如何使用dwz中的分页? 菜鸟提问,简单问题,关于dropdownlist ASP.NET2.0中的javascript脚本为什么不运行? asp.net中的ajax问题 请教个简单问题!!!非常万分感谢帮忙 如何在下面代码(图片滚动效果)中加入鼠标经过图片,图片放大的效果 请问:我的文件打开时为什么会出现个警告? 关于requiredfieldvalidator的问题 如何将刚刚上传的图片插入到FCK的光标位置? 求asp.net下的免费报表工具
http://topic.csdn.net/u/20090701/22/f985c795-66d0-4567-8882-48de3964c428.html
计算用来传递筛选条件的当前行上的给定表达式。
Object Compute (string expression,string filter)
string expression="(1.5+2.5)*2/4";
参考
using System.Text;
using System.CodeDom.Compiler;
using Microsoft.VisualBasic;
using System.Reflection;namespace TopWinCMS.Common.Userdefined
{
/// <summary>
/// 自定义公式
/// </summary>
/// <res>调用例子 double a = (double)Evaluator.Eval("sin(0.2) + 5");</res>
public class Evaluator
{
private static CodeDomProvider comp = new VBCodeProvider();
private static CompilerParameters cp = new CompilerParameters();
private static MethodInfo mi; /// <summary>
/// 执行公式
/// </summary>
/// <param name="expression">公式</param>
/// <returns></returns>
/// <res>调用例子 double a = (double)Evaluator.Eval("sin(0.2) + 5");</res>
public static object Eval(string expression)
{
StringBuilder codeBuilder = new StringBuilder(); codeBuilder.AppendLine("Imports System");
codeBuilder.AppendLine("Imports System.Math");
codeBuilder.AppendLine("Imports Microsoft.VisualBasic");
codeBuilder.AppendLine();
codeBuilder.AppendLine("Public Module Mode");
codeBuilder.AppendLine(" Public Function Func() As Object");
codeBuilder.AppendLine(" Return " + expression);
codeBuilder.AppendLine(" End Function");
codeBuilder.AppendLine("End Module"); cp.ReferencedAssemblies.Add("System.dll");
cp.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll");
cp.GenerateExecutable = false;
cp.GenerateInMemory = true; string code = codeBuilder.ToString();
CompilerResults cr = comp.CompileAssemblyFromSource(cp, code); if (cr.Errors.HasErrors)
{
return null;
}
else
{
Assembly a = cr.CompiledAssembly;
Type t = a.GetType("Mode");
mi = t.GetMethod("Func", BindingFlags.Static | BindingFlags.Public);
return mi.Invoke(null, new object[0]);
}
} }
}常用的数学计算全部OK