C#使用字符串公式进行计算的四种方法

  • A+
所属分类:.NetCore 学习笔记

C#使用字符串公式进行计算的四种方法

问题描述

开发中经常会遇到公式计算如采购业务中[数量]*[单价]=[金额],这时我们可以为列配置公式表达式,在CellValueChanged事件中调用公式计算的逻辑,下面列出了四种方式:

  • 利用SQL数据库计算
  • 利用JavaScript计算
  • 后序式计算
  • DataTable的Compute方法
  • 利用SQL数据库计算

    1. /// <summary>  
    2. /// 最简单的方式由SQL计算  
    3. /// </summary>  
    4. /// <param name="expression">表达式</param>  
    5. /// <returns></returns>  
    6. public static float CalcBySQL(string expression)  
    7. {  
    8.     string SQL = "SELECT " + expression + " AS RESULT_VALUE";  
    9.     SqlConnection conn = new SqlConnection("自己定义连接字符串");  
    10.     SqlCommand cmd = new SqlCommand(SQL, conn);  
    11.     object o = cmd.ExecuteScalar(); //执行SQL.  
    12.     return float.Parse(o.ToString());  
    13. }  

    利用JavaScript计算

    1. /// <summary>  
    2. ///  由Microsoft.Eval对象计算表达式,需要引用Microsoft.JScript和Microsoft.Vsa名字空间。  
    3. /// </summary>  
    4. /// <param name="expression">表达式</param>  
    5. /// <returns></returns>  
    6. public static float CalcByJs(string expression)  
    7. {  
    8.     Microsoft.JScript.Vsa.VsaEngine ve = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();  
    9.     object returnValue = Microsoft.JScript.Eval.JScriptEvaluate((object)expression, ve);  
    10.     return float.Parse(returnValue.ToString());  
    11. }  

    后序式计算

    1. /// <summary>  
    2. /// 由中序式转换成后序式,再用栈来进行计算  
    3. /// </summary>  
    4. /// <param name="expression">表达式</param>  
    5. /// <returns></returns>  
    6. public static float CalcByCalcParenthesesExpression(string expression)  
    7. {  
    8.     string result = new CalcParenthesesExpression().CalculateParenthesesExpression(expression);  
    9.     return float.Parse(result);  
    10. }  

    DataTable的Compute方法

    1. /// <summary>  
    2. /// 由DataTable计算公式  
    3. /// </summary>  
    4. /// <param name="expression">表达式</param>  
    5. internal static float CalcByDataTable(string expression)  
    6. {  
    7.     object result = new DataTable().Compute(expression, "");  
    8.     return float.Parse(result + "");  
    9. }  
    钰玺

    发表评论

    :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: