COMPARAR DOUBLES
                    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
Resolvi a questão comparando a variavel dValor como single, mas será que terá mesmo de ser feito assim?
por
Se alguem souber o motivo disso ou um jeito melhor agradeço a ajuda..
Té +
                
            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 SubResolvi a questão comparando a variavel dValor como single, mas será que terá mesmo de ser feito assim?
If dValor >= arrValores(i) Thenpor
If CSng(dValor) >= arrValores(i) ThenSe alguem souber o motivo disso ou um jeito melhor agradeço a ajuda..
Té +
                    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).
            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).
                    Tente assim
If CDbl(dValor) >= CDbl(arrValores(i)) Then
Creio que vai resolver o seu problema
            If CDbl(dValor) >= CDbl(arrValores(i)) Then
Creio que vai resolver o seu problema
                        Tópico encerrado , respostas não são mais permitidas
                    
                

