【问题标题】:C# Math calculator [duplicate]C#数学计算器[重复]
【发布时间】:2011-02-20 23:51:14
【问题描述】:

【问题讨论】:

标签: c# math calculator


【解决方案1】:

DataTable 有一个Compute 方法可以让你这样写:

var result = new DataTable().Compute("2-3/4*12", null);

请注意,这仅限于简单的数学表达式。

其他选项包括在 DLR 中使用动态语言,例如 IronPython 和 IronRuby。退房this post:

var engine = new IronPython.Hosting.PythonEngine();
double result = pythonEngine.EvaluateAs<double>("2-3/4*12");

您也可以查看NCalc library on GitHub

【讨论】:

  • 有趣。从来不知道有这样的东西存在!
  • Compute 是如何工作的?使用 SQL Server 运行?
  • 使用 DataTable 来计算字符串表达式有点不靠谱,但是您已经展示了一种非常简洁的使用方法。荣誉。
  • Mohamad... 您无需在任何地方运行 SQL Server 或激活 SQL 连接即可调用该函数。您只需要 System.Data 库。
【解决方案2】:

您可以选择一些有趣的选项。

  1. NCalc - C# Lexer Parser built with ANTLR。这将解析您的文本并允许您为参数/变量分配值。解释器是 C#,因此您不必在应用程序域中加载其他程序集等。

  2. JINT - 一个基于 C# 的 Javascript 解释器,由 ECalc 的同一作者使用 ANTLR 创建语法。这目前处于测试阶段,但适用于计算和函数。

  3. CS-Script.Net - 来自该站点:“CS-Script 是基于 CLR(公共语言运行时)的脚本系统,它使用符合 ECMA 标准的 C# 作为编程语言。CS-Script 目前针对 Microsoft 的 CLR 实现( .NET 2.0/3.0/3.5) 对 Mono 的支持有限。”加载脚本并在内存和单独的应用程序域中创建程序集。它非常健壮,我在生产环境中使用它来编写嵌入式脚本。

【讨论】:

  • 第二个 NCalc - 我已经广泛使用它,发现它非常稳定。
  • 另一方面,NCalc 的家伙在 codeplex.com 上有一个名为 Jint 的 C# javascript 解释器,我用它玩了一点,可以用它执行 John Resig 的原始 microtemplate.js。
【解决方案3】:

绝对属于“不推荐”类别,但为了完整起见——如果您有一个可以方便地连接到的数据库,请向其发送查询“SELECT expression”。

【讨论】:

    【解决方案4】:

    注意:这个答案只是为了完整性。这绝对不是我推荐的方法。

    可以直接从 C# 访问(已弃用的)JScript 库,这意味着您可以使用等效于 JScript 的 eval 函数。

    using Microsoft.JScript;        // needs a reference to Microsoft.JScript.dll
    using Microsoft.JScript.Vsa;    // needs a reference to Microsoft.Vsa.dll
    
    // ...
    
    string expr = "2 - 3 / 4 * 12";
    Console.WriteLine(JScriptEval(expr));    // displays -7
    
    // ...
    
    public static VsaEngine _engine = VsaEngine.CreateEngine();
    
    public static double JScriptEval(string expr)
    {
        // error checking etc removed for brevity
    
        return double.Parse(Eval.JScriptEvaluate(expr, _engine).ToString());
    }
    

    【讨论】:

      【解决方案5】:

      查看 FLEE(快速轻量级表达式评估器)-http://flee.codeplex.com/

      Flee 是 .NET 框架的表达式解析器和求值器。它允许您在运行时计算字符串表达式的值,例如 sqrt(a^2 + b^2)。它使用自定义编译器、强类型表达式语言和轻量级代码生成器将表达式直接编译为 IL。这意味着表达式评估非常快速和高效。试试这个演示,它可以让您根据表情生成图像,并亲眼看看。

      它免费且快速,我已经在几个项目中使用过它。

      【讨论】:

      • 看起来很酷。除了标准表达式 eval 之外,你能分享一下你是如何使用它的吗?例如它是如何影响您的架构等的。
      • +! FLEE 非常棒,而且非常易于使用。
      【解决方案6】:

      最好的选择是构建表达式树。首先你构建你的表达式树,然后使用http://msdn.microsoft.com/en-us/library/system.linq.expressions.aspx你可以编译它然后使用http://msdn.microsoft.com/en-us/library/bb356928(v=VS.100).aspx很容易

      【讨论】:

        【解决方案7】:

        呃,这似乎是一个非常过分的解决方案。

        你真正想要的是一个简单的解析器。

        您需要将字符串分解为标记,然后评估它们。这将使您开始研究。 http://en.wikipedia.org/wiki/Parsing#Overview_of_process

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-22
          • 1970-01-01
          • 2018-08-20
          相关资源
          最近更新 更多