Para crear el evaluador de expresiones voy crear un nuevo proyecto Windows Forms MathExpressionEvaluator.
Le he añadido al proyecto una referencia al ensamblado Microsoft.JScript para tener acceso a las clases que nos proporcionan la funcionalidad del motor de JScript.
En el formulario que Visual Studio crea por defecto he añadido un TextBox (con nombre txtExpression) que nos sirva para introducir las expresiones a evaluar, un Button (con nombre btnEvaluate) para realizar la evaluación, y un Label (con nombre lblResultado) que utilizaré para mostrar el resultado de la evaluación.
En el código del formulario voy a crear el método que evalúa las expresiones.
private string EvalExpression(string expression) { VsaEngine engine = VsaEngine.CreateEngine(); try { object o = Eval.JScriptEvaluate(expression, engine); return System.Convert.ToDouble(o).ToString(); } catch { return "No se puede evaluar la expresión"; } engine.Close(); }
Private Function EvalExpression(expression As String) As String Dim engine As VsaEngine = VsaEngine.CreateEngine() Try Dim o As Object = Eval.JScriptEvaluate(expression, engine) Return System.Convert.ToDouble(o).ToString() Catch Return "No se puede evaluar la expresión" End Try engine.Close() End Function
El código es sencillo. Simplemente creo una instancia del motor JScript y paso al método JScriptEvaluate de la clase Eval la expresión a evaluar. Si la evaluación se realiza sin errores y devuelve un valor numérico se devuelve el resultado. Si no devuelve un mensaje indicando que no se ha podido evaluar la expresión.
Para probar el método he creado un controlador para el evento Click del botón btnEvaluate para evaluar el contenido del txtExpression y dejar el resultado en lblResultado.
private void btnEvaluate_Click(object sender, EventArgs e) { lblResultado.Text = EvalExpression(txtExpression.Text); }
Private Sub btnEvaluate_Click(sender As Object, e As EventArgs) Handles btnEvaluate.Click lblResultado.Text = EvalExpression(txtExpression.Text) End Sub
Si arrancamos el proyecto podemos probar el evaluador de expresiones.
El código completo de este artículo, tanto en C# como en Visual Basic, está disponible en:
Evaluador de expresiones matemáticas
Lo probé con paréntesis corchete y potencias, y no funciona.
ResponderEliminarLos paréntesis debería respetarlos a la hora de alterar la precedencia de operadores. Otro tema es el de las potencias.
ResponderEliminarEste es un truco sencillo para evaluar expresiones matemáticas simples que lo que hace es llamar al motor de javascript y ejecutar un 'eval' de la expresión introducida. En este lenguaje no existe un operador para la operación de potencia por lo que la única manera de hacer esta operación es por código. De hecho si escribes la instrucción correspondiente (por ejemplo 'Math.pow(3,2)') te la ejecutará sin problemas.
Muchas gracias me sirvio, esto se puede mejorar y hacer algo chevere
ResponderEliminar