C # Calculadora matemática

Posibles duplicados:
¿Hay un evaluador matemático de cuerdas en .NET?
Conversión de expresión de cadena en valor entero utilizando C #
La mejor y más corta forma de evaluar expresiones matemáticas
c # cadena de evaluación “3 * (4 + 2)” yield int 18

¿Hay alguna forma de calcular expresiones matemáticas como (2-3 / 4 * 12) de una manera diferente a la presentada aquí?

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

DataTable tiene un método Compute que le permite escribir esto:

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

Tenga en cuenta que esto se limita a expresiones matemáticas simples.

Otra opción consiste en utilizar un lenguaje dynamic en el DLR, como IronPython e IronRuby. Mira esta publicación :

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

También puede consultar la biblioteca de NCalc en GitHub .

Hay algunas opciones interesantes disponibles para ti.

  1. NCalc : un analizador Lexer C # construido con ANTLR . Esto analizará su texto y le permitirá asignar valores a parámetros / variables. El intérprete es C #, por lo que no tiene que cargar assemblys adicionales en un dominio de aplicación, etc.

  2. JINT : un intérprete de JavaScript basado en C # creado por el mismo autor de ECalc que usa ANTLR para crear la gramática. Actualmente se encuentra en versión beta, pero funciona bien con cálculos y funciones.

  3. CS-Script.Net : desde el sitio: “CS-Script es un sistema de scripts basado en CLR (Common Language Runtime) que usa C # compatible con ECMA como lenguaje de progtwigción. Actualmente, CS-Script se dirige a la implementación de Microsoft de CLR (.NET 2.0 / 3.0 / 3.5) con soporte limitado en Mono “. Cargue los scripts y cree ensamblajes en la memoria y en el dominio de la aplicación por separado. Es bastante robusto y lo uso en producción para scripts incorporados.

Echa un vistazo a FLEE (Evaluador rápido de expresiones livianas) – http://flee.codeplex.com/

Flee es un analizador de expresiones y un evaluador para .NET framework. Le permite calcular el valor de expresiones de cadena tales como sqrt (a ^ 2 + b ^ 2) en tiempo de ejecución. Utiliza un comstackdor personalizado, un lenguaje de expresión fuertemente tipado y un codegen liviano para comstackr expresiones directamente a IL. Esto significa que la evaluación de expresiones es extremadamente rápida y eficiente. Pruebe la demostración, que le permite generar imágenes basadas en expresiones, y compruébelo usted mismo.

Es gratis y rápido y lo he usado en un par de proyectos.

NB: Esta respuesta es solo para completar. Definitivamente no es un enfoque que recomendaría.

Es posible acceder a las bibliotecas JScript (obsoletas) directamente desde C #, lo que significa que puede usar el equivalente de la función de eval de 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 en la categoría “no recomendar”, pero para completarlo: si tiene una base de datos a la que puede conectarse cómodamente, envíele la consulta “SELECCIONAR expresión “.

Eso parece una solución muy exagerada.

Lo que realmente quieres es un analizador simple.

Debes dividir la cadena en tokens y luego evaluarlos. Esto te ayudará a comenzar a investigar. http://en.wikipedia.org/wiki/Parsing#Overview_of_process

La mejor opción es construir un árbol de Expresión. Primero construye el árbol de su expresión, luego use http://msdn.microsoft.com/en-us/library/system.linq.expressions.aspx y puede comstackrlo fácilmente usando http://msdn.microsoft.com/ es-us / library / bb356928 (v = VS.100) .aspx