C # Calculadora matemática

Duplicatas possíveis:
Existe um avaliador matemático de cadeia de caracteres no .net?
Convertendo expressão de seqüência de caracteres para valor inteiro usando c #
Melhor e menor caminho para avaliar expressões matemáticas
c # avaliando string “3 * (4 + 2)” yield int 18

Existe uma maneira de calcular expressões matemáticas como (2-3 / 4 * 12) de uma maneira diferente da apresentada aqui?

http://www.c-sharpcorner.com/uploadfile/mgold/codedomcalculator08082005003253am/codedomcalculator.aspx

DataTable tem um método Compute que permite escrever isto:

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

Observe que isso é limitado a expressões matemáticas simples.

Outra opção consiste em usar uma linguagem dinâmica no DLR, como IronPython e IronRuby. Confira esta postagem :

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

Você também pode verificar a biblioteca NCalc no GitHub .

Existem algumas opções interessantes disponíveis para você.

  1. NCalc – um C # Lexer Parser construído com ANTLR . Isso analisará seu texto e permitirá que você atribua valores a parâmetros / variables. O interpretador é C #, portanto, você não precisa carregar assemblies adicionais em um domínio de aplicativo, etc.

  2. JINT – um interpretador Javascript baseado em C # construído pelo mesmo autor do ECalc usando o ANTLR para criar a gramática. Isso está atualmente em beta, mas funciona bem com cálculos e funções.

  3. CS-Script.Net – A partir do site: “O CS-Script é um sistema de script baseado em CLR (Common Language Runtime) que usa o C # compatível com ECMA como linguagem de programação. O CS-Script atualmente visa a implementação do CLR (.NET 2.0 / 3.0 / 3.5) com suporte limitado no Mono. ” Os scripts de carregamento e criam assemblies na memory e separam o domínio do aplicativo. É bastante robusto e eu uso isso na produção de scripts incorporados.

Confira FLEE (Fast Lightweight Expression Evaluator) – http://flee.codeplex.com/

Flee é um analisador de expressão e um avaliador para o .NET framework. Ele permite que você calcule o valor de expressões de string como sqrt (a ^ 2 + b ^ 2) em tempo de execução. Ele usa um compilador personalizado, linguagem de expressão fortemente tipada e codegen leve para compilar expressões diretamente para o IL. Isso significa que a avaliação da expressão é extremamente rápida e eficiente. Experimente a demonstração, que permite gerar imagens com base em expressões e ver por si mesmo.

É grátis e rápido e eu usei em alguns projetos.

NB: Esta resposta é apenas para completar. Definitivamente não é uma abordagem que eu recomendaria.

É possível acessar as bibliotecas JScript (obsoletas) diretamente do C #, o que significa que você pode usar o equivalente da function eval do JScript.

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

Definitivamente na categoria “não recomendo”, mas para completar – se você tem um database que você pode conectar convenientemente, envie a consulta “SELECT expression “.

Uh, isso parece ser uma solução muito superior.

O que você realmente quer é um analisador simples.

Você precisa dividir a string em tokens e depois avaliá-los. Isso fará você começar a pesquisar. http://en.wikipedia.org/wiki/Parsing#Overview_of_process

A melhor opção é construir a tree de expressões. Primeiro você constrói a tree da sua expressão e, em seguida, usa http://msdn.microsoft.com/en-us/library/system.linq.expressions.aspx você pode compilar facilmente usando http://msdn.microsoft.com/ en-us / library / bb356928 (v = VS.100) .aspx