C# Math calculator [duplicate]

2020-01-24 02:53发布

7条回答
smile是对你的礼貌
2楼-- · 2020-01-24 02:58

DataTable has a Compute method that allows you to write this:

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

Note that this is limited to simple math expressions.

Other option consist in using a dynamic language in the DLR such as IronPython and IronRuby. Check-out this post:

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

You may also check the NCalc library on GitHub.

查看更多
我欲成王,谁敢阻挡
3楼-- · 2020-01-24 02:58

NB: This answer is just for completeness. It's definitely not an approach that I'd recommend.

It's possible to access the (deprecated) JScript libraries directly from C#, which means that you can use the equivalent of JScript's eval function.

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());
}
查看更多
叛逆
4楼-- · 2020-01-24 02:59

There are some interesting options available to you.

  1. NCalc - a C# Lexer Parser built with ANTLR. This will parse your text and allow you to assign values to parameters / variables. The interpreter is C#, so you do not have to load additional assemblies in an app domain, etc.

  2. JINT - a C# based Javascript interpreter built by the same author of ECalc using ANTLR to create the grammar. This is currently in beta but works well with calculations and functions.

  3. CS-Script.Net - From the site: "CS-Script is a CLR (Common Language Runtime) based scripting system which uses ECMA-compliant C# as a programming language. CS-Script currently targets Microsoft implementation of CLR (.NET 2.0/3.0/3.5) with limited support on Mono." The load scripts and create assemblies in memory and separate app domain. It is quite robust, and I use it in production for embedded scripting.

查看更多
成全新的幸福
5楼-- · 2020-01-24 03:08

Uh that seems like a very over the top solution.

What you really want is a simple parser.

You need to break the string up into tokens and then evaluate them. This will get you started researching. http://en.wikipedia.org/wiki/Parsing#Overview_of_process

查看更多
Root(大扎)
6楼-- · 2020-01-24 03:11

Definitely in the "do not recommend" category, but for completeness -- if you've got a database you can conveniently connect to, send it the query "SELECT expression".

查看更多
爷的心禁止访问
7楼-- · 2020-01-24 03:12

Check out FLEE (Fast Lightweight Expression Evaluator) - http://flee.codeplex.com/

Flee is an expression parser and evaluator for the .NET framework. It allows you to compute the value of string expressions such as sqrt(a^2 + b^2) at runtime. It uses a custom compiler, strongly-typed expression language, and lightweight codegen to compile expressions directly to IL. This means that expression evaluation is extremely fast and efficient. Try out the demo, which lets you generate images based on expressions, and see for yourself.

It's free and fast and I've used it in a couple of projects.

查看更多
登录 后发表回答