Página 1 de 1
comparação errada de valores
Enviado: 22 Dez 2016 20:29
por porter
Olá pessoal, não entendo porque esse cálculo retorna .T., estou somando soma_parcelas + desconto e comparando com soma_, pelo debug
verifiquei os valores e a soma é exatamente igual.
Alguém já teve esse problema, como contornar ?
soma_parcelas = 1041.85
desconto = 31.54
soma_ = 1073.39
IF ( VAL(STR(soma_parcelas,12,2)) + VAL(STR(desconto,12,2)) < VAL(STR(soma_,12,2)) )
comparação errada de valores
Enviado: 22 Dez 2016 21:44
por asimoes
Porter,
Tenta isso:
Código: Selecionar todos
IF ( VAL(hb_NtoS(soma_parcelas+desconto)) < VAL(hb_NtoS(soma_)) )
Alert("Menor")
ENDIF
comparação errada de valores
Enviado: 22 Dez 2016 21:49
por asimoes
Pode tentar isso também:
Código: Selecionar todos
? Val(hb_NtoS(VAL(hb_NtoS(soma_parcelas)) + VAL(hb_NtoS(desconto)))) > VAL(hb_NtoS(soma_))
comparação errada de valores
Enviado: 22 Dez 2016 23:06
por wmanesco
Sinceramente não lembro de str já vai arredondar, mas tenta usar o round caso os outros exemplos não funcionem..
Código: Selecionar todos
IF ( Round( VAL(STR(soma_parcelas,12,2)), 2 ) + Round( VAL(STR(desconto,12,2)), 2) < Round( VAL(STR(soma_,12,2)) ,2) )
Já vi problemas como esse e round resolveu
comparação errada de valores
Enviado: 23 Dez 2016 07:49
por rubens
Eu uso Round em todos os cálculos de divisão e multiplicação...
Mas percebi também que esses erros geralmente acontecem quando o tamanho das variáveis (a máscara) são diferentes. Tipo um cálculo onde a máscara usada ou declaração foi 99999.99 e a outra foi 999999999.99 pode dar errado...
Mas depois de muito quebrar a cabeça resolvi adotar o round...
Rubens
comparação errada de valores
Enviado: 23 Dez 2016 08:15
por porter
Bom dia pessoal, agora deu certo, obrigado a todos.
esse deu certo, mas a minha preocupação é com as casas decimais que não é informada
Código: Selecionar todos
IF ( VAL(hb_NtoS(soma_parcelas+desconto)) < VAL(hb_NtoS(soma_)) )
esse não deu certo:
Código: Selecionar todos
IF ( Round( VAL(STR(soma_parcelas,12,2)), 2 ) + Round( VAL(STR(desconto,12,2)), 2) < Round( VAL(STR(soma_,12,2)) ,2) )
comparação errada de valores
Enviado: 23 Dez 2016 08:35
por JoséQuintas
Deixa mais simples, baseado até no seu anterior mesmo.
Código: Selecionar todos
IF Str( soma parcelas + desconto, 15, 2 ) < Str( soma_, 15, 2 )
Explicação:
A diferença ocorre ao trabalhar com numéricos com ponto flutuante.
Então como string, não tem a diferença de conversão.
Nota:
Essa diferença seria algo em torno de 0.00000000000000001
Convém lembrar que seu cálculo também poderia dar diferença de centavos.
Por exemplo, 1.000 em 3 parcelas de 333.33, vai totalizar 999.99
comparação errada de valores
Enviado: 23 Dez 2016 13:06
por porter
Obrigado JoseQuintas pela explicação, essa forma da certo e é mais simples.