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.