VB - Procijenite matematički izraz niza

Uvod

U VBA-u funkcija Evaluate uzima kao argument formulu postavljenu u alfanumeričkoj varijabli i vraća rezultat u alfanumeričku varijablu.

U VB-u, ova funkcija nedostaje i morate je implementirati sami.

Ovaj demo podržava jednostavne izračune +, -, * i / i zagrade.

Demo radi na isti način kao i funkcija Evaluate.

Ova se podloga koristi samo za testiranje.

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

Kod

 Funkcija Evaluer (ByVal Txt As String) As String Dim i As Integer, oNB As Integer, fNB As Integer Dim P1 As Integer, P2 Kao Integer Dim Buff As String Dim T As String 'Izračunajte y faut un point a la place de la virgule Txt = Zamijeni (Txt, ", ", ".") 'Važno je (za i = 1 u Len (Txt) ako je Mid (Txt, i, 1) = "(" Onda oNB = oNB + 1 Sljedeće i 'S'il ya des ((ouvrantes), voir si elle sont validée par des) (fermantes) Ako je oNB> 0 Zatim za i = 1 do Len (Txt) Ako je Mid (Txt, i, 1) = ")" Zatim fNB = fNB + 1 Sljedeće i drugo "Opis roditelja, procjena vrijednosti Evaluer = EvalueExpression (Txt) Izlaz Funkcija Završi Ako je oNB fNB Zatim 'Les roditelj ne sont pas concordantes, mettre poruka erreur parenthèse Izlaz Funkcija Kraj Ako je Dok 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), ")") '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 = Lijevo (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) Kraj Funkcija Funkcija EvalueExpression (A kao niz) Kao niz Dim T kao cijeli broj, S kao cijeli broj Dim B kao niz, i kao cijeli broj, C kao logički dim c1 kao dvostruki, c2 kao dvostruki, signe kao cijeli broj R As String, Fin Kao Boolean, z Kao Integer 'enlever les espace A = Zamijeni (A, "", "") Dok nije Fin Za i = 1 u Len (A) T = Asc (Mid (A, i, 1 )) Ako je T <48 i T 46 Ili i = Len (A) Onda ako je C Tada 'évalue Ako je i = Len (A), tada c2 = Val (Mid (A, S)) Else c2 = Val (Mid (A, S, i - S)) Kraj Ako je R = Str (CalculSimple (c1, c2, Signe)) Ako je i = Len (A), onda Fin = True Else A = Trim (R & Mid (A, i)) C = False Završi ako izlaz za drugo 's 1 up šifra c1 = Val (lijevo (A, i - 1)) Signe = TS = i + 1 C = istinski kraj ako se završi ako je sljedeći i Wend' remplacer l'expression par le résultat EvalueExpression = Kraj (R) Kraj funkcija 

U donju funkciju možete dodati različite vrste izračuna:

 Funkcija CalculSimple (n1 kao dvostruka, n2 kao dvostruka, signe kao cijeli broj) Kao dvostruki odabir slučaja Signe slučaj 43 '+ CalculSimple = n1 + n2 Slučaj 45' - CalculSimple = n1 - n2 Slučaj 42 '* CalculSimple = n1 * n2 Slučaj 47' / CalculSimple = n1 / n2 'Ici, ajouter d'autre calcul ... Funkcija završetka odabira kraja 
  • Napomena: Da bi bio u potpunosti usklađen s kalkulatorom, najprije morate procijeniti funkciju * ​​adn / i tek tada + i -.
  • Primjer 3 + 5 * 7
  • Kalkulator ga obrađuje na sljedeći način 5 * 7 = 35 + 3 = 38
  • Ali s ovom funkcijom: 3 + 5 = 8 * 7 = 56
  • Možete izmijeniti "EvalueExpression" ili unijeti izračun kao 3+ (5 * 7)

Prethodni Članak Sljedeći Članak

Top Savjeta