2017-05-07 51 views
0

我有這樣的C#中,如何計算一個操作字符串

str = "4975 + 10 * (LOG(250.6)) - 321.2" 

我要計算這個操作的結果的字符串。 有沒有什麼排序的方式來做到這一點?

// my operation just includes some of operators (,), +, -, *,/, ., 0-9, LOG 
// '.' is used for double number 
+0

@Rob我不認爲這是OP是思維的:) –

+5

的一小段路無有做這種沒有短的路,你必須解析字符串或提供一個用戶界面,允許某人輸入數字並按下日誌,減去,添加按鈕,又稱計算器界面,而不必根本解析字符串 –

+0

您可以查看該帖子http:// stackoverflow。 com/questions/333737/evaluate-string-342-yield-int-18 – hardkoded

回答

7

我相信這就是你要找的。

使用這個庫將幫助你在字符串格式進行數學運算

添加這個包

安裝,包裝DynamicExpresso.Core

代碼示例

public static void Main(string[] args) 
     { 
      var interpreter = new Interpreter(); 
      var result = interpreter.Eval("4975 + 10 * (LOG(250.6)) - 321.2".Replace("LOG", "Math.Log")); 

      Console.WriteLine("result=> " + result); 
      Console.ReadKey(); 
     } 

結果=> 4709.03858042462

link for LIB https://github.com/davideicardi/DynamicExpresso

+0

謝謝。這真的很有幫助。我甚至發現了一個我真正需要的功能(使用變量和參數)。 –

1

還回答了在這裏:

https://stackoverflow.com/a/2859130/1043824

嘗試DataTable.Compute

我沒有一個.net箱躺在附近,所以我不能確定是否可以做log或不,但我用它來表達長期的代數。

基本上,這是怎麼一回事呢:

DataTable dt = new DataTable(); 
var ans = dt.compute("5 + (7 - 9)/3"); 
+2

是的,但是DataTable在dotnet核心中是有限的和不可用的。 –

+0

它使用雙數和「+ - * /」運算符運行良好。但它不適用於Log。我得到這樣一個異常: 未處理的異常:System.Data.EvaluateException:該表達式包含未定義的函數調用Log()。 –