【问题标题】:Text Based Basic Formula Calculator Function/Class v2基于文本的基本公式计算器函数/类 v2
【发布时间】:2017-09-19 06:09:24
【问题描述】:

这是Text Based Basic Formula Calculator Function/Class的后续问题

我尝试使用一个简单的数学公式,即 2^3,如下所示,通过使用 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。为什么会发生这种情况?

其次,尝试了 MXParser,但我做了他们网站上解释的所有事情。但我没有使它与下面的代码一起工作,并在

我不知道为什么这些根本不起作用。请帮助我找到更好的东西或帮助我完成这些工作。

字符串结果 = 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();
        }
    }
}

【问题讨论】:

  • 请删除图片并将代码/异常粘贴为文本
  • @SirRufo 做到了。
  • mXparser.numberToAsciiString() 是一种仅基于数学公式显示“Helo World”的方法;-) 它将字节转换为文本。它不能用于评估表达式。为此,请遵循 mXparser 教程mathparser.org/mxparser-tutorial

标签: c# math operators


【解决方案1】:

但结果我得到了 10 个。为什么会发生这种情况?

CSharpScript.EvaluateAsync 方法,顾名思义,计算 C# 表达式。所以:

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

等同于:

var result = 2 ^ 8;

您还期望按位异或运算符的其他结果是什么?在 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);

【讨论】:

  • 感谢上帝,你是最棒的:)
【解决方案2】:

在 C# 中,^ 运算符是按位异或,而不是指数。

当其中一个操作数恰好为 1 时,xor 为 1。因此,您的二进制示例将是:

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

【讨论】:

    猜你喜欢
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多