Convidado 13/5/2014, 18:03
O problema maior no exemplo é a diferença de configurações regionais dos EUA para o Brasil...
No brasil, decimais são separados por vírgula.. No código da calculadora quando aperta a vírgula aparece o ponto...
O que fiz...
Ao apertar a vírgula.. Exibirá a mesma ao invés do ponto.
Private Sub HandleDecimalClick()
If LastInput <> csStateNums Then
lblReadOut.Caption = "0."
ElseIf Not DecimalFlag Then
lblReadOut.Caption = lblReadOut.Caption & ","
End If
DecimalFlag = False
LastInput = csStateNums
End Sub
Na função:
Private Sub HandleOperatorClick(strOp As String)Que é onde se processa as operações.. é necessário substituir o comando Val por Cdbl.. pois val ignora os decimais...
Oras as variáveis Op1 e Op2 São do tipo Double.. se a carrega utilizando a expressão Val ele ignorará os decimais.
Private Sub HandleOperatorClick(strOp As String)
If LastInput = csStateNums Then
NumOps = NumOps + 1
End If
If NumOps = 1 Then
'Op1 = Val(lblReadOut.Caption)
Op1 = CDbl(lblReadOut.Caption)
ElseIf NumOps = 2 Then
'Op2 = Val(Me.lblReadOut.Caption)
Op2 = CDbl(Me.lblReadOut.Caption)
Select Case OpFlag
Case "+"
Op1 = Op1 + Op2
Case "-"
Op1 = CDec(Op1) - CDec(Op2)
Case "*"
Op1 = Op1 * Op2
Case "/"
If Op2 = 0 Then
MsgBox "Não é possivel Dividir por Zero", _
vbExclamation, "Calculator"
Else
Op1 = Op1 / Op2
End If
Case "="
Op1 = Op2
Case "%"
Op1 = Op1 * Op2
End Select
lblReadOut.Caption = Format(Op1)
NumOps = 1
End If
LastInput = csStateOps
OpFlag = strOp
End Sub
Não fiz mais testes por me faltar tempo.. faça mais testes. qualquer coisa apite.
https://dl.dropboxusercontent.com/u/26441349/CalculadoraRSA.zip
Cumprimentos.