Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo convertir una cadena en un valor aritmético en VB

Cómo convertir una cadena en un valor aritmético en VB

'¡Esto se puede hacer usando la función que se le proporciona a continuación!

'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)

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

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

Si j = Len(strLeft) Entonces

Ps(i, n).s = str2 & strLeft: j = 0

Salir por

Finalizar si

Siguiente

Bucle hasta j = 0

Siguiente

'*/-----Fin

'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) & "/")

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!