2017-04-22 117 views
0

這是Text Based Basic Formula Calculator Function/Class基於文本的基本公式計算器功能/ V2級

我一直在使用一個簡單的數學公式爲2^3,你用Microsoft.CodeAnalysis.CSharp如下所示嘗試了跟進的問題。腳本

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Microsoft.CodeAnalysis.CSharp.Scripting; 
using Microsoft.CodeAnalysis.Scripting; 
using org.mariuszgromada.math; 
using org.mariuszgromada.math.mxparser; 


namespace ConsoleApplication4 
{ 
    class Program 
    { 
     static async Task<double> EvaluateFormulaAsync(string formula) 
     { 
      return await CSharpScript.EvaluateAsync<double>(formula, ScriptOptions.Default.WithImports("System.Math")); 
     } 
     static void Main(string[] args) 
     { 
      var result = EvaluateFormulaAsync("2^8").Result; 
      Console.WriteLine(result); 

      Console.ReadLine(); 
     } 
    } 
} 

但我得到結果,而不是。爲何會發生這種情況?

Seconly,嘗試MXParser,但我做了一切在他們的網站解釋。但我沒有使它與下面的代碼一起工作,並得到例外

我不知道爲什麼這些都不起作用。請幫助我找到更好的東西或幫助我完成這些工作。

String result = mXparser.numberToAsciiString(eh.calculate());

例外:System.ArgumentOutOfRangeException

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Microsoft.CodeAnalysis.CSharp.Scripting; 
using Microsoft.CodeAnalysis.Scripting; 
using org.mariuszgromada.math; 
using org.mariuszgromada.math.mxparser; 


namespace ConsoleApplication4 
{ 
    class Program 
    { 

     static void Main(string[] args) 
     { 

      Expression eh = new Expression("2^8"); 
      String result = mXparser.numberToAsciiString(eh.calculate()); 
      Console.WriteLine(Convert.ToInt32(result)); 

      Console.ReadLine(); 
     } 
    } 
} 
+0

請刪除的圖像,並粘貼代碼/異常文本 –

+0

@SirRufo做到這一點。 – Oray

+0

mXparser.numberToAsciiString()是一種僅基於數學公式顯示「Helo World」的方法;-)它將字節轉換爲文本。它不能用於評估表達式。爲此,請遵循mXparser教程http://mathparser.org/mxparser-tutorial/ –

回答

1

但我得到10結果。爲何會發生這種情況?

CSharpScript.EvaluateAsync方法,因爲它顧名思義,評估C#表達式。所以:

var result = EvaluateFormulaAsync("2^8").Result; 

是一樣的:

var result = 2^8; 

你從按位異或操作者期望還有什麼其他的結果?在C#中沒有電力運營商。如果你要評估的數學表達式,那麼你可能檢出mXparser

var result = EvaluateFormulaAsync("System.Math.Pow(2, 8)").Result; 

var ex = new Expression("2^8"); 
double result = ex.calculate(); 
Console.WriteLine(result); 
+0

感謝上帝,你是最棒的:) – Oray

0

在C#中的^操作是按位異或,而不是指數,你可以使用Math.Pow方法來代替。

異或爲1時,兩個運算數僅有一個爲1。因此,在二進制的例子是:

1000 = 8 
    0010 = 2 
xor ---- 
    1010 = 10