VB - Stringi matemaatilise väljenduse hindamine

Intro

VBA-s võtab hindamisfunktsioon argumendiks alfanumbrilise muutujaga esitatud valemit ja tagastab tulemuse tähtnumbriliseks muutujaks.

VB-s on see funktsioon puudu ja peate selle ise rakendama.

See demo toetab lihtsaid arvutusi +, -, * ja / ja sulgusid.

Demo toimib samamoodi nagu hindamisfunktsioon.

Seda ala kasutatakse ainult testimiseks.

 Sub TestCalcul () Dim A kui string Dim Ret kui string A = "(((3 * (12.223+ 15)) - 7) * 21) / 7" Ret = Evaluer (A) "silumine.Print Ret '= 224.007 A = "((123.32 / 2.67) * 6) +2127.34" Ret = Evaluer (A) "= 2404.46359550562 'Debug.Print Ret End Sub 

Kood

 Funktsioon Evaluer (ByVal Txt nagu string) stringina Dim i kui tervikuna, oNB kui tervikuna, fNB tervikuna Dim P1 kui tervikuna, P2 kui tervikuna Dim Buff kui string Dim T kui string 'Pour les calcs y faut un point à la place de la virgule Txt = Asenda (Txt, ", ", ".") 'Voir s'il ya des (Kui i = 1 kuni Len (Txt) Kui Mid (Txt, i, 1) = "(" Seejärel oNB = oNB + 1 Järgmine i 'S'il ya des ((ouvrantes), voir si elle sont validée par des) (fermantes) Kui oNB> 0 Siis i = 1 kuni Len (Txt) Kui Mid (Txt, i, 1) = ")" Siis fNB = fNB + 1 Järgmine i Else "Pas de parenthèse, Hinda suunamine le calcul Evaluer = EvalueExpression (Txt) Exit Funktsioon Lõpp Kui Kui ONB fNB Siis" Sisselülitatud funktsioonid, mettre message rakendusur parenthèse Exit Function End Kui ONB> 0 'recherche la dernière parenthèse ouvrante P1 = InStrRev (Txt, "(") "Recherche la parenthèse fermante de l'expression P2 = InStr (keskmine (Txt, P1 + 1), ") ") Hinda l 'väljend qui est entre parenthèses Buff = EvalueExpression (Keskmine (Txt, P1 + 1, P2 - 1)) 'Remplacer l'expression par le résultat et supprimer les parenthèses Txt = vasak (Txt, P1 - 1) & Buff & Mid (Txt, P1 + P2 + 1) oNB = oNB - 1 Wend' plus de parenthèse, évaluer la dernière Evaluer = EvalueExpression (Txt) Lõppfunktsioon Funktsioon HindamineExpression (A kui String) Stringina Dim T kui Integer, S kui Integer Dim B Stringina, i Nagu Integer, C Boolean Dim c1 Double, c2 Double, Signe As Integer Dim R kui string, Fin As Boolean, z kui Integer 'ever laiem les espace A = Asenda (A, "", "") Kuigi ei ole Fin i jaoks 1 = Len (A) T = Asc (Mid (A, i, 1 )) Kui T <48 ja T 46 või i = Len (A) Siis Kui C Seejärel 'évalue Kui i = Len (A) Siis c2 = Val (keskmine (A, S)) Else c2 = Val (keskel (A, S, i - S)) Lõpp Kui R = Str (CalculSimple (c1, c2, Signe)) Kui i = Len (A), siis Fin = True Else A = Trim (R & Mid (A, i)) C = False Lõpeta kui väljumine muule 'sépare le 1er chiffre c1 = Val (vasak (A, i - 1)) Signe = TS = i + 1 C = tõeline lõpp, kui lõpp, kui järgmine i Wend' remplacer l'expression par le résultat Hindamine Lõpeta (R) lõpp Funktsioon 

Alljärgnevas funktsioonis saate lisada erinevaid arvutustüüpe:

 Funktsioon CalculSimple (n1 kui kahekordne, n2 kahekordse, Signe kui tervikuna) Signe Case 43 '+ CalculSimple = n1 + n2 Case 45' - CalculSimple = n1 - n2 Juhtum 42 '* CalculSimple = n1 * n2 Case 47' / CalculSimple = n1 / n2 'Ici, ajouter d'autre calcul ... Lõppvaliku lõppfunktsioon 
  • Märkus. Selleks, et see oleks kalkulaatoriga täielikult kooskõlas, peate kõigepealt hindama * adn / function ja ainult siis + ja -.
  • Näide 3 + 5 * 7
  • Kalkulaator töötleb seda järgmiselt 5 * 7 = 35 + 3 = 38
  • Kuid selle funktsiooniga: 3 + 5 = 8 * 7 = 56
  • Saate muuta "Hinda väljavõtet" või sisestada arvutus 3+ (5 * 7)

Eelmine Artikkel Järgmine Artikkel

Top Näpunäited