VB - Mengevaluasi ekspresi matematis string

Intro

Dalam VBA fungsi Evaluate mengambil sebagai argumen formula yang ditetapkan dalam variabel alfanumerik dan mengembalikan hasilnya dalam variabel alfanumerik.

Di VB, fungsi ini hilang dan Anda harus menerapkannya sendiri.

Demo ini mendukung perhitungan sederhana +, -, *, dan /, dan tanda kurung.

Demo berfungsi dengan cara yang sama seperti fungsi Evaluate.

Sub ini hanya digunakan untuk pengujian ..

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

Kode

 Function Evaluer (ByVal Txt As String) Sebagai String Dim i Sebagai Integer, oNB As Integer, fNB As Integer Dim P1 Sebagai Integer, P2 As Integer Dim Buff As String Dim T Sebagai String 'Pour les menghitung y faut un point à la place de la virgule Txt = Ganti (Txt, ", ", ".") 'Voir s'il ya des (Untuk i = 1 Ke Len (Txt) Jika Pertengahan (Txt, i, 1) = "(" Lalu oNB = oNB + 1 Berikutnya i S'il ya des ((ouvrantes), voir si elle sont validée par des) (fermantes) Jika oNB> 0 Lalu Untuk i = 1 Ke Len (Txt) Jika Mid (Txt, i, 1) = ")" Lalu fNB = fNB + 1 Selanjutnya saya lewati 'Pas de parenthèse, Mengevaluasi arah perhitungan' Evaluer = EvalueExpression (Txt) Keluar dari Fungsi Berakhir Jika Jika oNB fNB Lalu 'Les parenthèses ne sont pas concordantes, mettre message erreur parenthèse Exit Function Endit Function If While 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), ")" 'ekspresi qui est entre parenthèses Buff = EvalueExpression (Pertengahan (Txt, P1 + 1, P2 - 1)) 'Remplacer l'expression par le résultat et supprimer les parenthèses Txt = Kiri (Txt, P1 - 1) & Penggemar & Pertengahan (Txt, P1 + P2 + 1) oNB = oNB - 1 Wend' plus de parenthèse, valuvaluer la dernière express Evaluer = EvalueExpression (Txt) Fungsi Akhir Fungsi EvalueExpression (A As String) Sebagai String Dim T Sebagai Integer, S As Integer Dim B Sebagai String, i As Integer, C As Boolean Dim c1 As Double, c2 As Double, Signe As Integer Dim R As String, Fin As Boolean, z Sebagai Integer 'enlever les espace A = Replace (A, "", "") While Not Fin Untuk i = 1 To Len (A) T = Asc (Mid (A, i, 1 )) Jika T <48 Dan T 46 Atau i = Len (A) Lalu Jika C Lalu 'nilai Jika i = Len (A) Lalu c2 = Val (Pertengahan (A, S)) Lain c2 = Val (Pertengahan (A, S, i - S)) End If R = Str (CalculSimple (c1, c2, Signe)) Jika i = Len (A) Kemudian Fin = True Else A = Trim (R & Mid (A, i)) C = False End If Exit For Else 'sépare le 1er chiffre c1 = Val (Kiri (A, i - 1)) Signe = TS = i + 1 C = True End If End If Next Jika saya ingin remplacer l'expression par le résultat EvalueExpression = Potong (R) Akhir Fungsi 

Anda dapat menambahkan berbagai jenis perhitungan dalam fungsi di bawah ini:

 Fungsi CalculSimple (n1 As Double, n2 As Double, Signe As Integer) Sebagai Double Select Case Signe Case 43 '+ CalculSimple = n1 + n2 Kasus 45' - CalculSimple = n1 - n2 Kasus 42 '* CalculSimple = n1 * n2 Kasus 47' / CalculSimple = n1 / n2 'Ici, ajouter d'autre perhitungan ... Akhir Pilih Fungsi Akhir 
  • Catatan: Agar sepenuhnya konsisten dengan kalkulator, Anda harus terlebih dahulu mengevaluasi * dan / fungsi dan hanya kemudian yang + dan -.
  • Contoh 3 + 5 * 7
  • Kalkulator memprosesnya sebagai berikut 5 * 7 = 35 + 3 = 38
  • Tetapi dengan fungsi ini: 3 + 5 = 8 * 7 = 56
  • Anda dapat memodifikasi "EvaluExpression" atau memasukkan perhitungan sebagai 3+ (5 * 7)

Artikel Sebelumnya Artikel Berikutnya

Tips