VB - Αξιολογήστε μια μαθηματική έκφραση μιας συμβολοσειράς

Intro

Στο VBA, η συνάρτηση αξιολόγησης παίρνει ως παράμετρο έναν τύπο που ορίζεται σε μια αλφαριθμητική μεταβλητή και επιστρέφει το αποτέλεσμα σε μια αλφαριθμητική μεταβλητή.

Στο VB, αυτή η λειτουργία λείπει και πρέπει να την εφαρμόσετε μόνοι σας.

Αυτό το demo υποστηρίζει απλούς υπολογισμούς +, -, *, και / και παρενθέσεις.

Το demo λειτουργεί με τον ίδιο τρόπο με τη λειτουργία αξιολόγησης.

Αυτό το υποσύνολο χρησιμοποιείται μόνο για δοκιμές ..

 Sub TestCalcul () Dim A ως String Dim Ret ως συμβολοσειρά A = "(((3 * (12.223+ 15)) - 7) * 21) / 7" Ret = Αξιολογητής (A) 'Debug.Print Ret' = 224.007 A = "((123.32 / 2.67) * 6) +2127.34" Ret = Αξιολογητής (Α) '= 2404.46359550562' Debug.Print Ret End Sub 

Ο κώδικας

 Μέθοδος αξιολόγησης (ByVal Txt ως συμβολοσειρά) Ως String Dim i ως ακέραιο, oNB ως ​​ακέραιο, fNB ως ​​ακέραιος Dim P1 ως ακέραιος, P2 ως ακέραιος Dim Buff ως συμβολοσειρά Dim T ως συμβολοσειρά 'Pour les calcs y faut un point à la place de (txt, i, 1) = "(" Στη συνέχεια oNB = oNB + 1 Επόμενο Εάν το oNB> 0 Στη συνέχεια Για i = 1 Σε Len (Txt) Αν Mid (Txt, i, 1) = ")" Στη συνέχεια, fNB = fNB + 1 Επόμενο άλλος Παρεγγενής, Εκτιμήστε την εκτίμηση Εκτιμητής = EvalueExpression (Txt) Έξοδος Λειτουργία Τέλος Εάν Εάν oNB fNB Στη συνέχεια, Εάν κατά τη διάρκεια της ανάλυσης P1 = InStrRev (Txt, "(") "Αναγνώριση της αρχικής έκφρασης της έκφρασης P2 = InStr (Mid (Txt, P1 + 1) 'έκφραση qui est entre parentheses Buff = EvalueExpression (Mid (Txt, Ρ1 + 1, Ρ2-1)) 'Remplacer l'expression par le résultat et supprimer les parentheres Txt = Αριστερά (Txt, P1-1) & Buff & Mid (Txt, P1 + P2 + 1) oNB = oNB - 1 Wend' plus de parenthèse, évaluer la dernière expression Εκτιμητής = EvalueExpression (Txt) Τέλος Λειτουργία Λειτουργία EvalueExpression (A ως String) Ως String Dim T ως ακέραιο, S ως ακέραιο Dim B ως συμβολοσειρά, i ως ακέραιο, C ως Boolean Dim c1 ως διπλό, c2 ως διπλό, (A, i, 1) Αν και δεν είναι τελικό για i = 1 Για Len (A) T = Asc (Mid (A, i, 1) ) Αν το T <48 και το T 46 ή i = Len (A) Στη συνέχεια, αν το C Στη συνέχεια 'evalue Αν i = Len (A) Στη συνέχεια c2 = Val (Mid (A, S) S, i - S)) Τέλος Αν R = Στ (CalcSimple (c1, c2, Signe)) Εάν i = Len (A) Κατόπιν Fin = True Else A = Τέλος αν Έξοδος Για το άλλο βήμα 1e chiffre c1 = Val (Αριστερά (A, i - 1)) Signe = TS = i + 1 C = True End Αν End If Next Επιστρέφει ο εκφραστής EvalueExpression = Περικοπή (R) Τέλος Λειτουργία 

Μπορείτε να προσθέσετε διαφορετικούς τύπους υπολογισμών στην παρακάτω λειτουργία:

 Λειτουργία CalcSimple (n1 ως διπλό, n2 ως διπλό, Signe ως ακέραιο) Ως διπλός δείκτης επιλογής Case Signe 43 '+ CalcSimple = n1 + n2 Περίπτωση 45' - CalcSimple = n1 - n2 Περίπτωση 42 '* CalculSimple = / CalcSimple = n1 / n2 'Ici, ajouter d'autre υπολογισμός ... End Select End Function 
  • Σημείωση: Προκειμένου να είναι απόλυτα συνεπής με μια αριθμομηχανή, θα πρέπει πρώτα να αξιολογήσετε τη λειτουργία * adn / function και μόνο τις ενότητες + και -.
  • Παράδειγμα 3 + 5 * 7
  • Μια αριθμομηχανή την επεξεργάζεται ως εξής 5 * 7 = 35 + 3 = 38
  • Αλλά με αυτή τη λειτουργία: 3 + 5 = 8 * 7 = 56
  • Μπορείτε να τροποποιήσετε το "EvalueExpression" ή να εισάγετε τον υπολογισμό ως 3+ (5 * 7)

Προηγούμενο Άρθρο Επόμενο Άρθρο

Οι Καλύτερες Συμβουλές