comparação errada de valores
Moderador: Moderadores
comparação errada de valores
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)) )
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
Porter,
Tenta isso:
Tenta isso:
Código: Selecionar todos
IF ( VAL(hb_NtoS(soma_parcelas+desconto)) < VAL(hb_NtoS(soma_)) )
Alert("Menor")
ENDIF
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
comparação errada de valores
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_))
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
comparação errada de valores
Sinceramente não lembro de str já vai arredondar, mas tenta usar o round caso os outros exemplos não funcionem..
Já vi problemas como esse e round resolveu
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) )William Manesco
Harbour 3.x | Fivewin | BCC | MySQL (TDolphin) | HBQT | HBIDE | Atom
Harbour 3.x | Fivewin | BCC | MySQL (TDolphin) | HBQT | HBIDE | Atom
- rubens
- Colaborador

- Mensagens: 1520
- Registrado em: 16 Ago 2003 09:05
- Localização: Nova Xavantina - MT
comparação errada de valores
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
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
"Eu e minha casa servimos ao Senhor e você
"
comparação errada de valores
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
esse não deu certo:
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_)) )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) )- JoséQuintas
- Administrador

- Mensagens: 20420
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
comparação errada de valores
Deixa mais simples, baseado até no seu anterior mesmo.
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
Código: Selecionar todos
IF Str( soma parcelas + desconto, 15, 2 ) < Str( soma_, 15, 2 )
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
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
comparação errada de valores
Obrigado JoseQuintas pela explicação, essa forma da certo e é mais simples.

