VB - Ocenite matematični izraz niza

Uvod

V VBA funkcija Evaluate vzame kot argument formulo, podano v alfanumerični spremenljivki in vrne rezultat v alfanumerično spremenljivko.

V VB ta funkcija manjka in jo morate sami uvesti.

Ta demo podpira preproste izračune +, -, * in / in oklepaje.

Demo deluje na enak način kot funkcija Evaluate.

Ta podmena se uporablja samo za testiranje.

 Sub TestCalcul () Dim A kot niz Dim As String A = "(((3 * (12.223+ 15)) - 7) * 21) / 7" Ret = Ocenjevalec (A) "Debug.Print Ret '= 224.007 A = "((123.32 / 2.67) * 6) +2127.34" Ret = ocenjevalec (A) '= 2404.46359550562' Debug.Print Ret End Sub 

Koda

 Funkcija Evaluer (ByVal Txt As String) As String Dim i Kot Integer, oNB Kot Integer, fNB Kot Integer Dim P1 Kot Integer, P2 Kot Integer Dim Buff Kot String Dim T As String 'Pour les calcul y faut un point a la place de la virgule Txt = Zamenjaj (Txt, ", ", ".") 'Voy s'il ya des (Za i = 1 v Len (Txt) Če je Mid (Txt, i, 1) = "(" Potem oNB = oNB + 1 Naprej i 'S'il ya des ((ouvrantes), voir si elle sont validée par des) (fermantes) Če je oNB> 0 Potem za i = 1 v Len (Txt) Če je Mid (Txt, i, 1) = ")" Nato fNB = fNB + 1 Naslednja in še "Poti staršev, Vrednotenje direktnega izračuna Evaluer = EvalueExpression (Txt) Izhod Funkcija Konec Če Če je oNB fNB nato 'Starševci ne sostorijo konc. Če je med oNB> 0 'recherche la dernière parenthèse ouvrante P1 = InStrRev (Txt, "(") "Recherche la parenthèse fermante de l'expression P2 = InStr (Mid (Txt, P1 + 1), ") ") Vrednost l 'izraz qui est entre parenthèses Buff = EvalueExpression (Mid (Txt, P1 + 1, P2 - 1)) "Remplacer l'expression par le résultat et supprimer les parenthèses Txt = Levo (Txt, P1 - 1) & Buff & Mid (Txt, P1 + P2 + 1) oNB = oNB - 1 Wend 'plus de parenthèse, évaluer la dernière expression Evaluer = EvalueExpression (Txt) Konec Funkcija Funkcija EvalueExpression (A kot niz) Kot niz Dim T kot celo število, S kot celo število Dim B Kot niz, i kot celo število, C kot Boolean Dim c1 kot dvojno, c2 kot dvojno, signe kot Integer Dim R As String, Fin Kot Boolean, z Kot Integer 'enlever les espace A = Zamenjaj (A, "", "") Medtem ko ni Fin Za i = 1 K Len (A) T = Asc (Mid (A, i, 1 )) Če je T <48 in T 46 Ali i = Len (A), potem če je C nato 'évalue Če i = Len (A), potem c2 = Val (Mid (A, S)) Else c2 = Val (Mid (A, S, i - S)) Konec Če je R = Str (izračun (c1, c2, signe)) Če je i = Len (A), potem Fin = True Else A = Trim (R & Mid (A, i)) C = False Konec Če Izhod za drugo 'je bil 1er šifriran c1 = Val (levo (A, i - 1)) Signe = TS = i + 1 C = True End, če se konča, če Next i Wend' remplacer l'izražanje par le résultat EvalueExpression = Trim (R) Konec Funkcija 

V spodnjo funkcijo lahko dodate različne vrste izračunov:

 Funkcija CalculSimple (n1 kot dvojna, n2 kot dvojna, signe kot celoštevilka) Kot dvojna izbira Case Signe Primer 43 '+ CalculSimple = n1 + n2 Case 45' - CalculSimple = n1 - n2 Primer 42 '* CalculSimple = n1 * n2 Primer 47' / CalculSimple = n1 / n2 'Ici, ajouter d'autre calcul ... Funkcija End Select End 
  • Opomba: Če želite, da je popolnoma v skladu s kalkulatorjem, morate najprej oceniti funkcijo * adn / in le potem + in -.
  • Primer 3 + 5 * 7
  • Kalkulator jo obdeluje, kot sledi 5 * 7 = 35 + 3 = 38
  • Toda s to funkcijo: 3 + 5 = 8 * 7 = 56
  • "EvalueExpression" lahko spremenite ali vnesete izračun kot 3+ (5 * 7)

Prejšnji Članek Naslednji Članek

Top Nasveti