求个公式解析源码 
只需要支持 + - * / () ,不需要支持函数。用于工资的计算的。 

解决方案 »

  1.   

     DataTable _Talbe = new DataTable();            string _Value = new DataTable().Compute("1+1+1*9+(1+1)", "").ToString();
      

  2.   

    这是个方法这个问题已经有过讨论了,有很多方法,结果看这里
    http://topic.csdn.net/u/20090701/22/f985c795-66d0-4567-8882-48de3964c428.html
      

  3.   

    DataTable.Compute()方法說明如下
    计算用来传递筛选条件的当前行上的给定表达式。 
     Object Compute (string expression,string filter)
    string expression="(1.5+2.5)*2/4";
    参考
      

  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