Cómo convertir una cadena en un valor aritmético en VB
'Primero defina las dos estructuras Parent y Plus, y coloque estas dos definiciones en la parte superior del segmento de código
Private Type Parent
s As String
p>valor como doble
tipo final
tipo privado más
s como cadena
valor como doble
Tipo final
'La siguiente es la definición de función para implementar esta función, que es bastante larga
Función pública ValueOfExpression(ByVal Express As String) As Double
Dim Pa() como padre, ParNum como entero, Ps() como Plus, OperNum como entero
Dim str0 como cadena
'Usar corchetes Express para descomponga la expresión: Begin--- --/*
Dim lenExp como entero, Lenstr1 como entero, i como entero, j como entero, k como entero, str1 como cadena, str2 como cadena, intPar como Entero
Dim intStart como entero, intEnd como entero
lenExp = Len(Express)
Para i = 1 a lenExp
Si Mid(Express, i, 1) = "(" Then intPar = intPar + 1
Next
ParNum = intPar
ReDim Pa((intPar / 10 + 1) * 10) p>
Para i = 1 Para intPar
Si intPar <1 entonces sale
Para j = 1 Para lenExp
Si Mid(Express, j, 1) = ")"Entonces
str1 = Mid(Express, 1, j - 1)
Salir para
Fin si
Siguiente
Lenstr1 = Len(str1)
Para k = 1 a Lenstr1
Si Mid(str1, Lenstr1 + 1 - k, 1) = "(" Entonces
Pa(i).s = Mid(str1, Lenstr1 + 2 - k)
Salir para
Fin si
Siguiente
Express = Mid(Express, 1, Lenstr1 - k) & Chr(128) & CStr(i) & Mid(Express , j + 1)
lenExp = Len(Express)
Siguiente
Pa(0).s = Express
'* /-----End
'Subdividido adicionalmente por signos más y menos: Begin-----/*
Dim n As Integer
, strLeft As String
Para i = 0 a ParNum
k = 0
Para j = 1 a Len(Pa(i).s)
str1 = Mid(Pa(i).s, j, 1)
Si str1 = "+" O str1 = "-" Entonces k = k + 1
Siguiente
Si k > OperNum Entonces OperNum = k
Siguiente
ReDim Ps(ParNum, OperNum)
Para i = 0 a ParNum
strLeft = Pa(i).s: n = 0: str2 = ""
Hacer
Si Len(strLeft) = 0 Entonces salga Do p>
Para j = 1 a Len(strLeft)
str1 = Mid(strLeft, j, 1)
Si str1 = "+" O str1 = "-" Entonces
Ps(i, n).s = str2 & Mid(strLeft, 1, j - 1)
n = n + 1
str2 = IIf(str1 = "-", str1, "")
strLeft = Mid(strLeft, j + 1)
Salir para
Finalizar si p>
Si j = Len(strLeft) Entonces
Ps(i, n).s = str2 & strLeft: j = 0
Salir por
Finalizar si
Siguiente
Bucle hasta j = 0
Siguiente
'*/-----Fin p>
'Calcular la suma de los valores de la última división en múltiples expresiones simples, es decir, el valor de la expresión Express
Dim Total As Double, value As Double
Para i = 1 Para ParNum + 1
Si i = ParNum + 1 Entonces i = 0
Total = 0
Para j = 0 A OperNum
Express = Ps(i, j).s: valor = 0
Dim lasti Como entero, operador Como cadena
lenExp = Len(Express ) : lasti = 0: operator = ""
For k = 1 To lenExp
str0 = Mid(Express, k, 1)
If InStr( " */^", str0) & gt;0 o k = lenExp entonces
Si k = lenExp entonces k = k + 1
str1 = Mid(Express, lasti + 1 , k - 1 - lasti)
Signo tenue Como entero, Valstr1 Como Doub
le
Si Mid(str1, lasti + 1, k - 1 - lasti)
Signo tenue como entero, Valstr1 como doble
If Mid(str1, 1, 1) = "-" Entonces
signo = -1
str1 = Mid(str1, 2)
De lo contrario
signo = 1
Fin si
n = InStr(1, "/sin" & Chr( 128) & "/cos" & Chr(128) & "/tan" & Chr(128 ) & "/abs" & Chr(128) & "/atn" & Chr(128) & "/exp" & Chr(128) & " /int" & Chr(128) & "/fix" &Chr( 128) & "/sgn" & Chr(128) & "/sqr" & Chr(128) & "/", "/" & Mid(str1, 1, 4) & "/")
p>Si n > 0 Entonces
Valstr1 = Elegir((n + 4) / 5, Sin(Pa(Val(Mid(str1, 5)).valor), Cos(Pa( Val(Medio(str1, 5)).valor), Tan(Pa(Val(Medio(str1, 5)).valor), Abs(Pa(Val(Medio(str1, 5)).valor), Atn(Pa (Val(Medio(str1, 5)).valor), Exp(Pa(Val(Medio(str1, 5)).valor), Int(Pa(Val(Medio( str1, 5)).valor), Fijar( Pa(Val(Medio(str1, 5)).valor), Sgn(Pa(Val(Medio(str1, 5)).valor), Sqr(Pa(Val(Medio(str1, 5)).valor))
Else
n = InStr(1, "/lg" & Chr(128) & "/ln" & Chr(128) & "/", Mid(str1, 1, 3))
Si n > 0 Entonces
Valstr1 = Elegir((n + 3) / 4, Log(Pa (Val(Mid(str1, 4))).valor ) / Log(10), Log(Pa(Val(Mid(str1, 4)).value))
De lo contrario
Si Mid(str1, 1, 1) = Chr (128) Entonces
Valstr1 = Pa( Val(Mid(str1, 2)).value
ElseIf Right(str1, 1) = "! "Entonces
Si Val(str1) = 0 entonces
Valstr1 = 1
En caso contrario
Valstr1 = 1
Para n = 1 A Val(str1)
Valstr1= Valstr1 * n
Siguiente
Finalizar si
Si no
Valstr1 = Val(str1)
Fin si
Fin si
Fin si
Valstr1 = Valstr1 * signo
Seleccionar operador de caso
Caso ""
valor = Valstr1
Caso "*"
valor = valor * Valstr1
Caso "/"
valor = valor / Valstr1
Caso "^"
valor = valor ^ Valstr1
Finalizar selección
lasti = k: operador = str0
Finalizar si
Siguiente
Ps( i, j).valor = valor
Total = Total + Ps(i, j).valor
Siguiente
Pa(i).valor = Total
Si i = 0, entonces salga para
Siguiente
ValueOfExpression = Pa(0).
Finalizar función
'OK, la definición de la función termina aquí
'Ejemplo de uso:
'A="5+5+5"
'Imprimir ValueOfExpression(A )
'Otras notas: esta función soporta muchas funciones matemáticas como sin, cos, tan, etc., por ejemplo:
'Print ValueOfExpression("sin(1)" )
'Tenga en cuenta los paréntesis al final
'¡Esta función admite los operadores +-*/^! y corchetes; ^ es una operación de multiplicación de potencia y tiene la misma prioridad que */. Esto debe tenerse en cuenta al utilizar esta función.
'¡Sabrás lo que sucede si; ¡pruébalo tú mismo!