I was trying to make a calculator program, but this bug kept on bugging me:
Dim a, flag As Integer
Dim b As String
b = TextField1.Text
TextField1.Text = ""
If flag = 1 Then
TextField1.Text = a + val(b)
ElseIf flag = 2 Then
TextField1.Text = a - val(b)
ElseIf flag = 3 Then
TextField1.Text = a / val(b)
ElseIf flag = 4 Then
TextField1.Text = a * val(b)
End If
I strongly suggest always to use cStr or CDbl for number conversion if you do not want to get stuck in localisation problems with commas and points in Numbers. For Division isn’t Double better than Integer?
May be this helps you out, I’ve commented all critical passages:
[code]Dim a, result, flag As Integer // WHERE DOES THESE VARs COME FROM? FLAG IS WITHOUT VALUE!
Dim b As String = TextField1.Text
if b <> “” then // WHAT TO DO WITH EMPTY TEXTFIELD? SHOULD CANCEL OR CALC WITH 0 INSTEAD?
select case flag
case 1
result = a + val(b)
case 2
result = a - val(b)
case 3
if val(b) <> 0 then result = a / val(b) // CAUTION: DIV BY ZERO POSSIBLE! ALWAYS CHECK YOUR DIVs!
case 4
result = a * val(b)
case else
// WHAT TO TO WHEN FLAG IS S.TH ELSE? I ASSUME RESULT AS ZERO.
result = 0
end select
end if
TextField1.Text = cstr(result)
[/code]
or more elegant as function:
TextField1.Text = DoSomething(TextField1.Text, a, flag)
function DoSomething(b as string, a as integer, flag as integer) as string
Dim result As Integer
if b <> "" then
select case flag
case 1
result = a + val(b)
case 2
result = a - val(b)
case 3
if val(b) <> 0 then result = a / val(b)
case 4
result = a * val(b)
case else
result = 0
end select
end if
return cstr(result)
end function