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 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é +
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