基于文本的基本公式计算器功能/类v2

时间:2017-04-22 06:56:45

标签: c# math operators

这是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();
        }
    }
}

2 个答案:

答案 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