none
Ejecutar una formula pasada como parametro RRS feed

  • Pregunta

  • hola a todos.

    Tengo una fórmula almacenada en una variable tipo string y necesito ejecutarla.

    Alguien sabe como hacerlo, sin necesidad de sacar cada una de las partes del string para hacer el cálculo.

    Ejemplo:

    dim cadena as string
    dim valor as decimal

    cadena="200+10*(30/5)"


    valor= Funcion???(Cadena)

    Gracias de antemano por las respuestas recibidas:

    En el ejemplo, los valores que tengo puestos  no son reales,  los desconozco en el momento de realizar la operación. El contenido de la cadena
    me viene dado y está almacenado en un datagrid
    Ejemplo: 

    Cadena= Me.DtgFormula.Rows.Item(i).Cells("Formula").Value.ToString

    Donde 'Cadena', siempre es una expresión que puede ser del tipo:

    cadena="200+10*(30/5)"

    y lo que necesito es resolver esa expresión .








     
    • Editado Mic1234 lunes, 29 de junio de 2009 9:06
    viernes, 26 de junio de 2009 17:12

Respuestas

  • creo que ya tengo la solución auque no sé si será la más apropiada

    Imports

    MSScriptControl  ' agregar referencia, En pestaña COM , Microsoft Script Control 1.0

     

     


    Dim
    ParaCalcular As New ScriptControl

     

    Dim cadena2 As String

     

    Try

    cadena2 =

    "200 + 10 * (30 / 5)"

    ParaCalcular.Language =

    "VBScript"

    MsgBox(ParaCalcular.Eval(cadena2))

     

    Catch ex As Exception

    MsgBox(ex.Message)

     

    End Try




    gracias a todos . Un saludo

    lunes, 29 de junio de 2009 16:16

Todas las respuestas

  • hola,

    Podrias hacer usod e algo como esto:

    Dynamic Formula Processing Library

    MathParser - Math Formula Parser

    creo que te puede servir.


    nota: la libreria esta en c#, pero si programas en vb.net no deberias tener problema ya que tu puedes referenciar a la libreria compilada, con lo cual te abstraes de la implementacion.

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 26 de junio de 2009 17:35
  • hola antes que nada las conversiones som primero para el tipo de desarrollo de variables string o de decimal puesto que tienen que ser del mismo tipo de varibles numericas para poder procesar el valor

    aqui te dejo esta cadena, lo corecto seria

       Dim cadena As Decimal = 200 + 10 * (30 / 5)
            Dim valor As Decimal
    
    
            valor = (cadena)
    
            MsgBox(valor)
    espero te ayude este comentario

    o puedes usar la Clace Math

    Math.Exp("num")



    marca como respuesta a este comentario si te ha ayudado a resolver lo que necesitabas

    Saludos

    Melvin.








    Todo Es posible si se studia con exfuerso no importando los de mas Dios esta con nosotros y no hay mas sabiduria que la de Dios, Everything is posible if you study a lot wiht esforce , God Loves us and there isn't anybody like God.... Melvin Saludos
    viernes, 26 de junio de 2009 19:26
  • Otra opcion a lo que dice melvin seria ponerlo asi

    Dim cadena as String

    Cadena=Cstr(Cdbl(200+10*(30/5)))
    viernes, 26 de junio de 2009 20:28
  • Gracias de antemano por las respuestas recibidas:

    En el ejemplo, los valores que tengo puestos  no son reales,  los desconozco en el momento de realizar la operación. El contenido de la cadena me viene dado y está almacenado en un datagrid
    Ejemplo: 

    Cadena= Me.DtgFormula.Rows.Item(i).Cells("Formula").Value.ToString

    Donde 'Cadena', siempre es una expresión que puede ser del tipo:

    cadena="200+10*(30/5)"

    y lo que necesito es resolver esa expresión .
    lunes, 29 de junio de 2009 9:07
  • Gracias de antemano por las respuestas recibidas:

    En el ejemplo, los valores que tengo puestos  no son reales,  los desconozco en el momento de realizar la operación. El contenido de la cadena
    me viene dado y está almacenado en un datagrid
    Ejemplo: 

    Cadena= Me.DtgFormula.Rows.Item(i).Cells("Formula").Value.ToString

    Donde 'Cadena', siempre es una expresión que puede ser del tipo:

    cadena="200+10*(30/5)"

    y lo que necesito es resolver esa expresión .
    lunes, 29 de junio de 2009 9:07
  • creo que ya tengo la solución auque no sé si será la más apropiada

    Imports

    MSScriptControl  ' agregar referencia, En pestaña COM , Microsoft Script Control 1.0

     

     


    Dim
    ParaCalcular As New ScriptControl

     

    Dim cadena2 As String

     

    Try

    cadena2 =

    "200 + 10 * (30 / 5)"

    ParaCalcular.Language =

    "VBScript"

    MsgBox(ParaCalcular.Eval(cadena2))

     

    Catch ex As Exception

    MsgBox(ex.Message)

     

    End Try




    gracias a todos . Un saludo

    lunes, 29 de junio de 2009 16:16
  • Hola amigo ¿porqué no echas un vistazo a los delegados y funciones Lambda? Quizás te sirvan para lo que necesitas hacer, incluso dándote más flexibilidad a la hora de realizar los cálculos.

    Saludos.
    Francisco J.

    martes, 30 de junio de 2009 8:53