这是Text Based Basic Formula Calculator Function/Class
的后续问题我尝试使用一个简单的数学公式,如下所示,使用 Microsoft.CodeAnalysis.CSharp.Scripting :
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();
}
}
}
但结果是 10 而不是 256 。为什么会发生这种情况?
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 :(得分:1)
但结果我得了10分。为什么会发生这种情况?
CSharpScript.EvaluateAsync
方法,顾名思义,评估 C#表达式。所以:
var result = EvaluateFormulaAsync("2 ^ 8").Result;
与:
相同var result = 2 ^ 8;
您对按位xor运算符的其他结果是什么?在C#中,没有电力运营商。您可以改为使用Math.Pow
方法:
var result = EvaluateFormulaAsync("System.Math.Pow(2, 8)").Result;
如果您想评估数学表达式,那么您可以查看mXparser库:
var ex = new Expression("2 ^ 8");
double result = ex.calculate();
Console.WriteLine(result);
答案 1 :(得分:0)
在C#中,^
运算符是按位xor,而不是指数。
当其中一个操作数为1时,xor为1.因此,二进制文件中的示例为:
1000 = 8
0010 = 2
xor ----
1010 = 10