zoukankan      html  css  js  c++  java
  • 转: 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);
       }
       
    }
  • 相关阅读:
    进程池线程池
    线程与其操作方法
    生产者消费者模型
    Java反射机制详解
    ajax跨域原理以及解决方案
    数据库连接池的选择 Druid
    新目标
    让webstorm支持avalon语法自动补全
    使用IDEA和gradle搭建Spring MVC和MyBatis开发环境
    使用IDEA自带的rest client参数传递乱码问题
  • 原文地址:https://www.cnblogs.com/jearay/p/3613584.html
Copyright © 2011-2022 走看看