最簡單的字串算式計算方法

來源:互聯網
上載者:User

大家都遇到過,計算一個字串算式的問題,解決起來挺麻煩的。我在一年前想過一個辦法,就是連一下資料庫,執行“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)" ) );

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.