• 转: c# 字符串公式计算


    C# 自动计算字符串公式的值(三种方式)

    从网络上找到这段源码,重新整理后测试通过.

    有三种方式可自动计算字符串公式的值:
    1. 最简单的方式,由SQL语句计算
    2. 使用Microsoft.Javascript计算
    3. 使用后序表达式计算(数据结构)

    原文内容:

    在编程应用程序过程中,有时需要字符串表达式的值。
    如字符串:"23+56/(102-100)*((36-24)/(8-6))",计算结果=191。

    根据数据结构栈的应用介绍,通过把表达式由中序式转换成后序式,再用栈来进行计算。
    如上述字符串表达式:"23+56/(102-100)*((36-24)/(8-6))",
    转换为后序时为:"23|56|102|100|-|/|*|36|24|-|8|6|-|/|*|+"(其中字符"|"为分隔符)。

    本程序代码如下:在VS2008 +winXP下编译通过。


    C# Code:


    /// <summary> 
    /// C#自动计算字符串公式的值 
    /// </summary> 
    public class CalcStringExpression
    {
       /// <summary> 
       /// 最简单的方式由SQL计算 
       /// </summary> 
       /// <param name="expression">表达式</param> 
       /// <returns></returns> 
       public static float CalcBySQL(string expression)
       {
          string SQL = "SELECT " expression " AS RESULT_VALUE";
          SqlConnection conn = new SqlConnection("自己定义连接字符串");
          SqlCommand cmd = new SqlCommand(SQL, conn);
          object o = cmd.ExecuteScalar(); //执行SQL. 
          return float.Parse(o.ToString());
       }
       
       /// <summary> 
       /// 由Microsoft.Eval对象计算表达式,需要引用Microsoft.JScript和Microsoft.Vsa名字空间。 
       /// </summary> 
       /// <param name="expression">表达式</param> 
       /// <returns></returns> 
       public static float CalcByJs(string expression)
       {
          Microsoft.JScript.Vsa.VsaEngine ve = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();
          object returnValue = Microsoft.JScript.Eval.JScriptEvaluate((object)expression, ve);
          return float.Parse(returnValue.ToString());
       }
       
       /// <summary> 
       /// 由中序式转换成后序式,再用栈来进行计算 
       /// </summary> 
       /// <param name="expression">表达式</param> 
       /// <returns></returns> 
       public static float CalcByCalcParenthesesExpression(string expression)
       {
          string result = new CalcParenthesesExpression().CalculateParenthesesExpression(expression);
          return float.Parse(result);
       }
       
    }
  • 相关阅读:
    Single Number II
    Pascal's Triangle
    Remove Duplicates from Sorted Array
    Populating Next Right Pointers in Each Node
    Minimum Depth of Binary Tree
    Unique Paths
    Sort Colors
    Swap Nodes in Pairs
    Merge Two Sorted Lists
    Climbing Stairs
  • 原文地址:https://www.cnblogs.com/jearay/p/3613584.html
Copyright © 2020-2023  润新知