大家都遇到过,计算一个字符串算式的问题,解决起来挺麻烦的。我在一年前想过一个办法,就是连一下数据库,执行“Select [算式] as Result”,从而得到结果。这几天因对公司程序的优化,我的这个模块要摆脱数据库,所以这种方法也就不能用了。结果从网上查结果,也没有找到确切的办法。
最后绞尽脑汁想了一个这样的方法:

using System;
public static class WwmEval
{
    static System.Windows.Forms.WebBrowser wb;
    static WwmEval() {
        wb = new System.Windows.Forms.WebBrowser();
        wb.DocumentText = @"<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN""><html><head><script type=""text/javascript"">function myEval(ss){ return eval(ss);}</script></head><body></body></html>";
    }

public static double Eval(string Expressions) {
        return Convert.ToDouble(wb.Document.InvokeScript("myEval", new object[] { Expressions }));
    }
}

最后调用,WwmEval.Eval("2*(100+100)");结果是:400;

不过这样还不是很完美。由于是按需编译的,所以在第一次调用时结果是0,我记得有一个特性可以强编译!具体是那个,怎么解决,望各位前辈帮我。我可能孤陋寡闻,这样做太笨,也望前辈们指教。

我第一次向首页发东西,如果影响了站容,站长就快点删了吧。


本篇文章充分起到了抛砖引玉的作用,有两块美玉整理如下:
1.#12楼 2009-06-02 15:05 | 陈旭85
DataTable dt = new DataTable();
string a = dt.Compute("(12*100)/120", "").ToString();
MessageBox.Show(a);

2.#24楼 2009-06-02 17:54 | 知北游
楼主没有思考CSharp为什么可以解析JavaScript脚本,
所以有了如上的代码,其实我们可以更简单。。。。。。
引入COM组件Microsoft Script Control 1.0
然后如下的代码就可以通过了。。。。。。
public static String ExprToVal(String Expr)
{
MSScriptControl.ScriptControlClass sc = null;
sc = new MSScriptControl.ScriptControlClass();
sc.Language = "JavaScript";
object obj = sc.Eval(Expr);
return obj.ToString();
}
测试:
Console.WriteLine( ExprToVal( " 1 + 2 * (3 + 4)" ) );

转载于:https://www.cnblogs.com/gleamy_ming/archive/2009/06/02/1494453.html

最简单的字符串算式计算方法相关推荐

  1. redis学习 -- 简单动态字符串

    Redis没有使用C语言字符串的形式,通过'\0'作为结尾,而是使用了简单动态字符串(simple dynamic string). 当Redis使用的字符串不需要修改字符串的内容的时候,可以使用C语 ...

  2. 阿里面试这样问:redis 为什么把简单的字符串设计成 SDS?

    2021开工第一天,就有小伙伴私信我,还给我分享了一道他面阿里的redis题(这家伙绝比已经拿到年终奖了),我看了以后觉得挺有意思,题目很简单,是那种典型的似懂非懂,常常容易被大家忽略的问题.这里整理 ...

  3. PHP简单的字符串加密与加密代码

    PHP简单的字符串加密与加密代码 代码 //加密算法 function encode($string = '', $skey = 'cxphp') {$strArr = str_split(base6 ...

  4. 《Redis设计与实现》阅读笔记(二)--简单动态字符串

    简单动态字符串 Redis只在一些无需对字符串进行修改的地方使用C字符串,大部分时候使用简单动态字符串(simple dynamic string, SDS),字符串的抽象类型.二进制安全,可以存放任 ...

  5. Redis简单动态字符串

    简单动态字符串 Simple Dynamic String是Redis内部自己定义的一种数据类型 在Redis内部, 任何包含字符串的键值对都是由SDS实现的 SDS还被用于缓冲区, 比如AOF缓冲区 ...

  6. c 字符串数组_redis为什么不直接使用C字符串,而要自定义简单动态字符串?

    来源:公众号[编程珠玑] 作者:守望先生 ID:shouwangxiansheng Redis (一个使用ANSI C编写的开源.支持网络.基于内存.可选持久性的键值对存储数据库.)没有直接使用 C ...

  7. Shell脚本实现简单分割字符串

    这篇文章主要介绍了Shell脚本实现简单分割字符串,本文讲解使用CUT命令实现以逗号.分号或其它分隔符来切割字符串,需要的朋友可以参考下 我们有这样一个字符串: 复制代码代码如下: info='abc ...

  8. Redis内部数据结构详解之简单动态字符串(sds)

    本文所引用的源码全部来自Redis2.8.2版本. Redis中简单动态字符串sds数据结构与API相关文件是:sds.h, sds.c. 转载请注明,本文出自:http://blog.csdn.ne ...

  9. linux c之把最简单的字符串数据追加写入文件

    1 问题 把最简单的字符串数据追加写入文件 2 代码实现 #include <stdio.h> #include <string.h>void write_data_to_fi ...

  10. Redis数据结构之简单动态字符串SDS

    Redis的底层数据结构非常多,其中包括SDS.ZipList.SkipList.LinkedList.HashTable.Intset等.如果你对Redis的理解还只停留在get.set的水平的话, ...

最新文章

  1. 浅谈分布式系统一致性之3PC协议
  2. TSM对Oracle数据库备份脚本
  3. EJS学习(三)之语法规则中
  4. 第七章:暴力求解法。第二部分
  5. JDK 10:FutureTask获取一个toString()
  6. 谈谈JAVA中的安全发布
  7. 2.[精通Hibernate笔记]整合Spring
  8. js中函数返回值return
  9. 字模提取软件怎么放大_图片无损放大软件 Topaz Gigapixel AI
  10. Excel VBA生成SQL建表语句
  11. 【PICkit3】PICkit3 Programmer烧写教程
  12. 解决nohup.out文件过大的方法
  13. 天地图三维帮助文档(Cesium)
  14. PCI Express 2D 多媒体显卡_IOEHM-GC_V1.0 Mini-PCIe 显卡_嵌入式行业图像显示_视频加速和2D加速功能
  15. 用户认证授权系统方案思考
  16. 什么是top sql
  17. App兼容性测试/MONKEY配置和安装
  18. 高考数学95分能学计算机吗,数学模考5分到高考95分?
  19. 晓说2017-定期持续更新
  20. 如何在RobotStudio搭建基本工作站

热门文章

  1. Python学习教程:爬虫分析了京东内衣销售记录,哪个size最多?
  2. LOJ#6360. 复燃「恋之埋火」(最小圆覆盖+高斯消元)
  3. Loadrunner请求自定义的http(json)文件and参数化
  4. 常用js或jq效果汇总
  5. Bfs 逃脱(牛客网)
  6. 企业搜索 Solr7 安装部署
  7. 2017-2018-20172309 《程序设计与数据结构》第五周学习总结
  8. 中文编程汉语编程实例
  9. Hexo Next底部powered by的logo栏更改以及注意事项(附官方文档,文末有福利链)
  10. Postfix邮件服务系统