最简单的字符串算式计算方法

大家都遇到过,计算一个字符串算式的问题,解决起来挺麻烦的。我在一年前想过一个办法,就是连一下数据库,执行“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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值