C#中字符串轉換為計算公式(自定義公式的計算)


第一種解決方案

第一種也是功能最強大的一種,可以使用Eval函數,像在Java中一樣強大,幾乎所有的運算符都可以實現,包括四則運算,與或非等。

添加COM引用:

        private void button2_Click(object sender, EventArgs e)
        {
            MSScriptControl.ScriptControl sc = new MSScriptControl.ScriptControlClass();
            sc.Language = "JavaScript";
            MessageBox.Show(sc.Eval("((2*3)-5+(3*4))+6/2").ToString());//1+12+3
        }

在引用COM組件的時候,出現了無法嵌入互操作類型“……”,請改用適用的接口的錯誤提示。查閱資料,找到解決方案,記錄如下:

選中項目中引入的dll,鼠標右鍵,選擇屬性,把“嵌入互操作類型”設置為False。

第貳種解決方案

簡單的四則運算或判斷可以使用DataTable.Compute來實現。

DataTable dt = new DataTable();
MessageBox.Show(dt.Compute("1*2+3", "false").ToString());
                                                    //替換公式
                                                    string formula = "K*(F0+Fi)";
                                                    double K = 0.0D, F0 = 3.0F, Fi = 10.0F;
                                                    formula = formula.Replace("K", "{0}");
                                                    formula = formula.Replace("F0", "{1}");
                                                    formula = formula.Replace("Fi", "{2}");
                                                    formula = string.Format(formula, K, F0, Fi);
                                                    DataTable dt = new DataTable();
                                                    string really_data = dt.Compute(formula, "false").ToString();

 

第叄種解決方案

第三種比較耗費性能,局限性較大,就是在用SQL語句來實現。SQL中的select語句也可以實現計算。

 
        
string strConn = "Data Source=127.0.0.1;Initial Catalog=CementCartDB;Persist Security Info=True;User ID=sa;Password=123456"
conn = new SqlConnection(strConn);
conn.Open();
cmd = conn.CreateCommand();
string biaodashi = "1&1";
cmd.CommandText = "select "+biaodashi;
string o = cmd.ExecuteScalar().ToString();
MessageBox.Show(o);
 
        

以上是我總結的字符串轉換為運算符的幾種方式。自己備份的同時希望對大家也有所幫助。

轉載地址

 

評論給出的其他辦法:文中的三種方法均不太好,還有一種更好的方法,可參考: https://pzy.io/archives/2019/10/calculating-string-formula.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM