異世界


2012年7月8日 星期日

C# 執行時期動態輸入數學運算式

1. 方法 1 : 使用 ScriptControl 調用 VBScript 進行計

    方法 2 : 使用 XPathNavigator.Evaluate 進行計算  (MSDM 物件說明)

[C#]計算以字串表示的數學運算式結果

2. 使用CodeCompiler動態建置程式碼  =>  CodeDomProvider 類別

 

3.  NCalc: 處理數學運算的好幫手

NCalc 簡介

NCalc 由 Evaluant 公司的研發團隊開發,是在 .NET Framework 中處理運算式字串(expression string)並回傳結果的一種工具類別庫,它支援數種數學運算、邏輯運算以及自訂函數運算的功能,例如這樣的程式碼:

[C#]

    1. Expression e = new Expression("2 + 3 * 5");
    2. Debug.Assert(17 == e.Evaluate());

下載點 :

NCalc - Mathematical Expressions Evaluator for .NET

 

DOWNLOADS

Application NCalc - Binaries.zip

application, 62K, uploaded Sep 21 2011 - 2262 downloads

Source Code NCalc - Sources.zip

source code, 85K, uploaded Sep 21 2011 - 2068 downloads

 

  • 使用 NCalc

要在專案中使用 NCalc,只需要在專案中加入對 NCalc.dll 檔案(由 Codeplex 網站下載)的參考,並在程式碼中使用 NCalc 命名空間(using NCalc;)即可。NCalc 的運算式是以 Expression 類別為主,可以接受傳入邏輯運算式(Logic Expression)物件以及字串,並可以設定 NCalc 的運算式評估選項。選項決定 NCalc 的處理行為,像是不設定(None)、不分大小寫(IgnoreCases)、不快取運算式(NoCache)以及迭代參數處理(IternateParameters)等等。

NCalc 支援下列幾種算符(operator):

類型 算符 說明
Logical

or, ||

and, &&

邏輯運算算符。
Relational

=, ==, !=, <>

<, <=, >, >=

條件比對算符。
Additive +, - 加法算符。
Multiplicative *, /, % 乘法算符。
Bitwise &, |, ^, >>, <<
位元運算與移動算符。
Unary !, not, ~, - 否定算符。
Primary (, ), values 括號與一般數值算符。

 

以及下列數值類型:

類型 說明
integer 整數型別。
floating point number
浮點數型別。
scientific notation
科學記號型數值型別(如 1e+100)。
Dates and Times
日期與時間型別,若要使用此型別,則要用 "#" 標記,例如 #2009/12/4#
Booleans
布林值,true/false
Strings
字串值。
Functions
函數,內建有 20 種數學函數(都是 Math 類別中提供的函數,但部份 Math 類別支援的,NCalc 未支援),以及兩種特別函數(in 和 if),可參考http://ncalc.codeplex.com/wikipage?title=functions 取得支援的函數清單。
Parameters

參數,在運算式字串中要用 "[" "]" 包起來,然後以 Expression.Parameters 來設定其值,例如 2+5+[pi],[pi] 即為參數。

 


資料來源:

  1. http://www.dotblogs.com.tw/chou/archive/2010/12/03/19881.aspx

  2. http://msdn.microsoft.com/zh-tw/ee854988.aspx

  3. http://www.dotblogs.com.tw/kim/archive/2010/07/21/codecompiler.aspx

 

 

 

 

 

 

 

 

沒有留言:

張貼留言