最简单的字符串算式计算方法
大家都遇到过,计算一个字符串算式的问题,解决起来挺麻烦的。我在一年前想过一个办法,就是连一下数据库,执行“Select [算式] as Result”,从而得到结果。这几天因对公司程序的优化,我的这个模块要摆脱数据库,所以这种方法也就不能用了。结果从网上查结果,也没有找到确切的办法。
最后绞尽脑汁想了一个这样的方法:
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
最简单的字符串算式计算方法相关推荐
- redis学习 -- 简单动态字符串
Redis没有使用C语言字符串的形式,通过'\0'作为结尾,而是使用了简单动态字符串(simple dynamic string). 当Redis使用的字符串不需要修改字符串的内容的时候,可以使用C语 ...
- 阿里面试这样问:redis 为什么把简单的字符串设计成 SDS?
2021开工第一天,就有小伙伴私信我,还给我分享了一道他面阿里的redis题(这家伙绝比已经拿到年终奖了),我看了以后觉得挺有意思,题目很简单,是那种典型的似懂非懂,常常容易被大家忽略的问题.这里整理 ...
- PHP简单的字符串加密与加密代码
PHP简单的字符串加密与加密代码 代码 //加密算法 function encode($string = '', $skey = 'cxphp') {$strArr = str_split(base6 ...
- 《Redis设计与实现》阅读笔记(二)--简单动态字符串
简单动态字符串 Redis只在一些无需对字符串进行修改的地方使用C字符串,大部分时候使用简单动态字符串(simple dynamic string, SDS),字符串的抽象类型.二进制安全,可以存放任 ...
- Redis简单动态字符串
简单动态字符串 Simple Dynamic String是Redis内部自己定义的一种数据类型 在Redis内部, 任何包含字符串的键值对都是由SDS实现的 SDS还被用于缓冲区, 比如AOF缓冲区 ...
- c 字符串数组_redis为什么不直接使用C字符串,而要自定义简单动态字符串?
来源:公众号[编程珠玑] 作者:守望先生 ID:shouwangxiansheng Redis (一个使用ANSI C编写的开源.支持网络.基于内存.可选持久性的键值对存储数据库.)没有直接使用 C ...
- Shell脚本实现简单分割字符串
这篇文章主要介绍了Shell脚本实现简单分割字符串,本文讲解使用CUT命令实现以逗号.分号或其它分隔符来切割字符串,需要的朋友可以参考下 我们有这样一个字符串: 复制代码代码如下: info='abc ...
- Redis内部数据结构详解之简单动态字符串(sds)
本文所引用的源码全部来自Redis2.8.2版本. Redis中简单动态字符串sds数据结构与API相关文件是:sds.h, sds.c. 转载请注明,本文出自:http://blog.csdn.ne ...
- linux c之把最简单的字符串数据追加写入文件
1 问题 把最简单的字符串数据追加写入文件 2 代码实现 #include <stdio.h> #include <string.h>void write_data_to_fi ...
- Redis数据结构之简单动态字符串SDS
Redis的底层数据结构非常多,其中包括SDS.ZipList.SkipList.LinkedList.HashTable.Intset等.如果你对Redis的理解还只停留在get.set的水平的话, ...
最新文章
- 浅谈分布式系统一致性之3PC协议
- TSM对Oracle数据库备份脚本
- EJS学习(三)之语法规则中
- 第七章:暴力求解法。第二部分
- JDK 10:FutureTask获取一个toString()
- 谈谈JAVA中的安全发布
- 2.[精通Hibernate笔记]整合Spring
- js中函数返回值return
- 字模提取软件怎么放大_图片无损放大软件 Topaz Gigapixel AI
- Excel VBA生成SQL建表语句
- 【PICkit3】PICkit3 Programmer烧写教程
- 解决nohup.out文件过大的方法
- 天地图三维帮助文档(Cesium)
- PCI Express 2D 多媒体显卡_IOEHM-GC_V1.0 Mini-PCIe 显卡_嵌入式行业图像显示_视频加速和2D加速功能
- 用户认证授权系统方案思考
- 什么是top sql
- App兼容性测试/MONKEY配置和安装
- 高考数学95分能学计算机吗,数学模考5分到高考95分?
- 晓说2017-定期持续更新
- 如何在RobotStudio搭建基本工作站