COMPARAR DOUBLES

GANDA.NICK 02/09/2013 13:37:53
#428393
Olá,

Alguem me consegue explicar o motivo do resultado desta comparação estar errado


Na 2ª vez deste ciclo (quando i=1) ambos os valores são 0.01 e não me entra no IF...

Se colocar lá um breakpoint (para ir linha a linha), até mostra os dois valores com 0.01


Option Explicit

Dim arrValores(1 To 2) As Double

Private Sub CarregarArrayComValores()
arrValores(1) = 0.01
arrValores(2) = 0.05
End Sub


Private Sub Command1_Click()
Dim dValor As Double: dValor = 0.06
Dim i As Integer

For i = 2 To 1 Step -1
If dValor >= arrValores(i) Then
dValor = dValor - arrValores(i)
MsgBox [Ô]Entrou[Ô]
End If
Next [ô]i

End Sub

Private Sub Form_Load()
Call CarregarArrayComValores
End Sub



Resolvi a questão comparando a variavel dValor como single, mas será que terá mesmo de ser feito assim?

If dValor >= arrValores(i) Then


por

If CSng(dValor) >= arrValores(i) Then




Se alguem souber o motivo disso ou um jeito melhor agradeço a ajuda..


Té +
KIMH 02/09/2013 17:22:54
#428412
Resposta escolhida
Utilize o comando Round em seu IF que irá funcionar.

Ex: If Rouynd(dValor, Precisão) >= Round(arrValores(i), Precisão) Then


isso ocorre porque o tipo de variável double utiliza ponto flutuante oque não garante o valor exato (mesmo em Debug os valores aparentam ser iguais).
FILMAN 02/09/2013 21:48:05
#428420
Tente assim

If CDbl(dValor) >= CDbl(arrValores(i)) Then


Creio que vai resolver o seu problema
Tópico encerrado , respostas não são mais permitidas