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);
   }
   
}

转: c# 字符串公式计算的更多相关文章

  1. [转]用Objective-C实现简单的数学字符串公式的计算

    好友第一次用写技术分享,这么多年都没见他正经的写点东西.那天突然抬头问我,Objective-C有没字符串计算的.我说,没有.后来他默默实现了,特为他转发,表示支持. ================ ...

  2. C语言:根据以下公式计算s,s=1+1/(1+2)+1/(1+2+3)+...+1/(1+2+3+...+n) -在形参s所指字符串中寻找与参数c相同的字符,并在其后插入一个与之相同的字符,

    //根据一下公式计算s,并将计算结果作为函数返回值,n通过形参传入.s=1+1/(1+2)+1/(1+2+3)+...+1/(1+2+3+...+n) #include <stdio.h> ...

  3. 用python实现计算1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))类似的公式计算

    作业需求: 开发一个简单的python计算器 1.实现加减乘除及拓号优先级解析 2.用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 ...

  4. WPF实现强大的动态公式计算

    数据库可以定义表不同列之间的计算公式,进行自动公式计算,但如何实现行上的动态公式计算呢?行由于可以动态扩展,在某些应用场景下将能很好的解决实际问题. 1.VS2012新建一个WPF应用程序WpfApp ...

  5. 使用Machin公式计算

    使用Machin公式计算,并使用百亿进制+末项位数控制,这里可算出数万位(比最简PI快80倍),源代码约40行,在本网页中. 计算公式 PI=16arctg(1/5)-4arctg(1/239),其中 ...

  6. js字符串长度计算(一个汉字==两个字符)和字符串截取

    js字符串长度计算(一个汉字==两个字符)和字符串截取 String.prototype.realLength = function() { return this.replace(/[^\x00-\ ...

  7. objective-c中字符串长度计算

    我们知道,在c语言中,使用sizeof ()计算在内存中占用的字节数, 引用string.h后,使用strlen()计算字符串的长度(不包含\0). 而在object-c中, "length ...

  8. c语言详解  蔡勒(Zeller)公式计算某一天是星期几  极其方便

    —— 蔡勒(Zeller)公式 ,小于等于14,即在蔡勒公式中,某年的1.2月要看作上一年的13.14月来计算,比如2003年1月1日要看作2002年的13月1日来计算):d:日:[ ]代表取整,即只 ...

  9. Windows API方式直接调用C#的DLL,支持多音字转拼音、Gzip解压缩、公式计算(VBA、C++、VB、Delphi甚至java都可以)

    原始链接 https://www.cnblogs.com/Charltsing/p/DllExport.html 这两年,我在VBA应用方面一直有几大痛点:1.多音字转拼音:2.64位下的GZIP解压 ...

随机推荐

  1. lucene源码分析(2)读取过程实例

    1.官方提供的代码demo Analyzer analyzer = new StandardAnalyzer(); // Store the index in memory: Directory di ...

  2. 【转】marquee标签简介

    本文转自:http://www.360doc.com/content/12/0818/16/8351655_230872993.shtml marquee语法    <marquee>&l ...

  3. 《小岛经济学--鱼、美元和经济的故事》Digest

    作者:彼得.D.希夫(Peter D. Schiff)安德鲁.J.希(Andrew J. Schiff) How an Economy Grows and Why It Crashes 打车到清华,车 ...

  4. 马尔科夫随机场(Markov Random Field)

    马尔可夫随机场(Markov Random Field),它包含两层意思:一是什么是马尔可夫,二是什么是随机场. 马尔可夫过程可以理解为其当前的状态只与上一刻有关而与以前的是没有关系的.X(t+1)= ...

  5. vue基于d2-admin的RBAC权限管理解决方案

    前两篇关于vue权限路由文章的填坑,说了一堆理论,是时候操作一波了. vue权限路由实现方式总结 vue权限路由实现方式总结二 选择d2-admin是因为element-ui的相关开源项目里,d2-a ...

  6. SVN trunk(主线) branch(分支) tag(标记) 用法详解和详细操作步骤

    使用场景: 假如你的项目(这里指的是手机客户端项目)的某个版本(例如1.0版本)已经完成开发.测试并已经上线了,接下来接到新的需求,新需求的开发需要修改多个文件中的代码,当需求已经开始开发一段时间的时 ...

  7. JAVA编写简单的日历,输入日期即可查看日历

    利用LocalDate输入年月日找出当月日历 直接上代码 import java.time.LocalDate; import java.util.Scanner; public class Cale ...

  8. JVM进程状态监控

    前言 ========== 为什么需要做服务器jvm自动发现的监控呢?这个事情主要有两点原因: 1.zabbix默认监控jvm状态是使用jmx中转进行监控的,监控效率比较低下 2.zabbix使用jm ...

  9. Sourcetree报错: 您没有已经配置扩展集成设置的远端

    一.错误提示 您没有已经配置扩展集成设置的远端; ... 二.解决 配置 Legacy Account Settings 即可:

  10. 宜立方商城中,mvn报错'dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique: org.springframework:spring-webmvc:jar报错

    'dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique: org.springframework:s ...