关于计算器的有关问题

关于计算器的问题[codeVB][/code]Dim num1, t, d, cat, aPrivate Sub Command1_Click(Index As Integer)I

关于计算器的问题
[code=VB][/code]
Dim num1, t, d, cat, a
Private Sub Command1_Click(Index As Integer)
If Index <= 9 Then
  If t > 9 And t <> 15 Then
  Text1.Text = Index
  Else
  If Text1.Text = "0" Then
  Text1.Text = Index
  Else
  Text1.Text = Text1.Text & Index
  End If
  End If
Else
  Select Case Index
  Case 10 '加法
  If cat = 2 Then
  num1 = num1 - Val(Text1.Text)
  Text1.Text = num1
  ElseIf cat = 3 Then
  num1 = num1 * Val(Text1.Text)
  Text1.Text = num1
  ElseIf cat = 4 Then
  num1 = num1 / Val(Text1.Text)
  Text1.Text = num1
  ElseIf d = 0 Then
  d = 1
  num1 = Text1.Text
  Text1.Text = 0
  Else
  num1 = num1 + Val(Text1.Text)
  Text1.Text = num1
  End If
  cat = 1
  p = 0
  Case 11 '减法
  If cat = 1 Then
  num1 = num1 + Val(Text1.Text)
  Text1.Text = num1
   
  ElseIf cat = 3 Then
  num1 = num1 * Val(Text1.Text)
  Text1.Text = num1
   
  ElseIf cat = 4 Then
  num1 = num1 / Val(Text1.Text)
  Text1.Text = num1
  ElseIf d = 0 Then
  d = 1
  num1 = Text1.Text
  Text1.Text = 0
  Else
  num1 = num1 - Val(Text1.Text)
  Text1.Text = num1
  End If
  cat = 2
  p = 0
  Case 12 '乘法
  If cat = 1 Then
  num1 = num1 + Val(Text1.Text)
  Text1.Text = num1
   
  ElseIf cat = 2 Then
  num1 = num1 - Val(Text1.Text)
  Text1.Text = num1
   
  ElseIf cat = 4 Then
  num1 = num1 / Val(Text1.Text)
  Text1.Text = num1
  ElseIf d = 0 Then
  d = 1
  num1 = Text1.Text
  Text1.Text = 0
  Else
  num1 = num1 * Val(Text1.Text)
  Text1.Text = num1
  End If
  cat = 3
  p = 0
  Case 13 '除法
  If cat = 1 Then
  num1 = num1 + Val(Text1.Text)
  Text1.Text = num1
  ElseIf cat = 2 Then
  num1 = num1 - Val(Text1.Text)
  Text1.Text = num1
  ElseIf cat = 3 Then
  num1 = num1 * Val(Text1.Text)
  Text1.Text = num1
  ElseIf d = 0 Then
  d = 1
  num1 = Text1.Text
  Text1.Text = 0
  Else
  num1 = num1 / Val(Text1.Text)
  Text1.Text = num1
  End If
  cat = 4
  p = 0
  Case 15 '小数点
  If p = 0 Then
  Text1.Text = Text1.Text + "."
  p = 1
  End If
  
  
  
  Case 16 '等于
   
  If cat = 1 Then
  num1 = num1 + Val(Text1.Text)
  Text1.Text = num1
  ElseIf cat = 3 Then
  num1 = num1 + Val(Text1.Text)
  Text1.Text = num1
   
  ElseIf cat = 2 Then
  num1 = num1 - Val(Text1.Text)
  Text1.Text = num1
   
  ElseIf cat = 4 Then
  num1 = num1 / Val(Text1.Text)
  Text1.Text = num1
  End If
  p = 0
  End Select
End If
t = Index
End Sub

Private Sub Command2_Click()
a = Len(Text1.Text)
If a = 1 Then
Text1.Text = 0
Else
Text1.Text = Left(Text1.Text, a - 1)


End If

End Sub

Private Sub Command3_Click()
Text1.Text = 0
num1 = 0
d = 0
p = 0
End Sub

Private Sub Form_Load()
d = 0
End Sub




[解决办法]
逆波兰表达式
你试试 msgbox eval("123.4*5.67+89")

VB code
Public Sub Push(Data As String, ByRef SP As String)    SP = SP & Data & ","End SubPublic Function Pop(ByRef SP As String) As String    Dim Arr() As String, I As Integer    If Len(SP) = 0 Then        Pop = ""    Else        Arr = Split(SP, ",")        I = UBound(Arr) - 1        SP = Left(SP, Len(SP) - Len(Arr(I)) - 1)        Pop = Arr(I)    End IfEnd FunctionPublic Function RPN(Str As String) As String    Dim SP As String, A As String, B As String, C As String, R As String    Dim PA As Integer, PB As Integer    Dim I As Integer, D As Integer    C = Str & "#"    D = Len(C)    R = "0"    For I = 1 To D        A = Mid(C, I, 1)        Select Case A            Case "+", "-", "*", "/", "(", ")", ">", "<", "=", "#"                R = R & IIf(Len(R) > 0, "$", "")                Do                    If (Len(SP) = 0) Or (A = "(") Then                        If A <> ")" Then SP = SP & A                        Exit Do                    Else                        B = Right(SP, 1)                        Select Case A                            Case "*", "/"                                PA = 4                            Case "+", "-"                                PA = 3                            Case "<", ">", "="                                PA = 2                            Case "(", ")"                                PA = 1                            Case Else                                PA = 0                        End Select                        Select Case B                            Case "*", "/"                                PB = 4                            Case "+", "-"                                PB = 3                            Case "<", ">", "="                                PB = 2                            Case "(", ")"                                PB = 1                            Case Else                                PB = 0                        End Select                        If PA > PB Then                            SP = SP & A                            Exit Do                        Else                            SP = Left(SP, Len(SP) - 1)                            B = Replace(B, "(", "")                            R = R & B                        End If                    End If                Loop            Case Else                R = R & A        End Select    Next    RPN = REnd FunctionPublic Function Eval(Str As String) As Single    Dim Arr() As String    Dim X As String, SP1 As String, SP2 As String, R As String    Dim CHA As String, CHB As String, CHC As String, CHD As String    Dim C As Integer, D As Integer, I As Integer, J As Integer    X = RPN("0$" & Str)    C = Len(X)    For I = 1 To C        CHA = Mid(X, I, 1)        Select Case CHA            Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "."                CHB = CHB & CHA            Case "$"                Push CHB, SP1                CHB = ""            Case Else                CHB = Pop(SP1)                CHC = Pop(SP1)                If Len(CHC) = 0 Then CHC = "0"                Select Case CHA                    Case "+"                        CHD = CStr(CSng(CHC) + CSng(CHB))                    Case "-"                        CHD = CStr(CSng(CHC) - CSng(CHB))                    Case "*"                        CHD = CStr(CSng(CHC) * CSng(CHB))                    Case "/"                        CHD = CStr(CSng(CHC) / CSng(CHB))                    Case ">"                        CHD = IIf(CSng(CHC) > CSng(CHB), "1", "0")                    Case "<"                        CHD = IIf(CSng(CHC) < CSng(CHB), "1", "0")                    Case "="                        CHD = IIf(CSng(CHC) = CSng(CHB), "1", "0")                End Select                Push CHD, SP1                CHB = ""        End Select    Next    Eval = CSng(Pop(SP1))End Function