Página 1 de 1

variaveis de valor igual considerando uma maior que a outra

Enviado: 30 Set 2015 16:53
por porter
ola pessoal, tenho duas variaveis, cdesconto e desconto e os valores sao identicos, pelo debugador estou conferindo cada uma tem o valor de 3.58, mas na comparação na rotina abaixo, ele considera cdesconto > desconto, alguem ja teve esse problema, se teve, como resolver, obrigado.

Código: Selecionar todos

IF cdesconto > desconto <-- aqui ele considera cdesconto > que desconto, mas os valores sao identicos.
    LOOP
ELSE
    EXIT
ENDIF

variaveis de valor igual considerando uma maior que a outra

Enviado: 30 Set 2015 17:22
por Jairo Maia
Olá Porter,

Isso é porque em uma delas você está usando máscara, possivelmente a máscara "@E". Em outro post a cerca de 1 ano a outro colega já disse que a razão não sei, mas nesse caso você precisa alterar usando a função Round(). Veja:

Código: Selecionar todos

IF Round( cdesconto, 2 ) > Round( desconto, 2 )
    LOOP
ELSE
    EXIT
ENDIF

variaveis de valor igual considerando uma maior que a outra

Enviado: 30 Set 2015 17:25
por Eolo
Ponto flutuante: cdesconto contém 3.58 e desconto contém 3,580000001

Já apanhei com isso, não lembro quem me passou a dica aqui no Forum.

Passei a SEMPRE usar o STRZERO pra comparar dois números:
strzero(cdesconto,10,2)==strzero(desconto,10,2), comparando tamanho e conteúdo (com o ==)

Fim do problema.

Faça um teste: peça pra mostrar os dois números, com o máximo possível de casas decimais, tipo
? strzero(cdesconto,20,15)
? strzero(desconto,20,15)

variaveis de valor igual considerando uma maior que a outra

Enviado: 01 Out 2015 07:47
por porter
obrigado Jairo e Eolo, deu certo, estranho que no Clipper, fiz esse teste e esse problema não aconteceu.

variaveis de valor igual considerando uma maior que a outra

Enviado: 02 Out 2015 08:52
por paiva_dbdc
if round(campo1,2) = round(campo2,2)

realmente é um saco.

NAo sei se o comando SET que define o n de casas acaba com isso.

Paiva

variaveis de valor igual considerando uma maior que a outra

Enviado: 02 Out 2015 22:26
por rbonotto
Também apanhei muito, minha solução foi colocar assim:

IF TRANSF(valor1,'999,999.99') # TRANSF(valor2,'999,999.99')
xxxx
ELSE
xxxx
END

abs

variaveis de valor igual considerando uma maior que a outra

Enviado: 08 Out 2015 15:42
por vagucs
eu não sei, mas acho que isso não está relacionado apenas a dígitos decimais, eles também causam isto, mas nem sempre são eles os únicos causadores.

O clipper aloca números na memória as vezes, parece que com zeros a esquerda, ai depende do tamanho da variável.

É algo como se var=999999.99 depois jogo var=9.99 e ai quando comparo, é como se comparasse a alocação da memória toda.

É um saco isso.

variaveis de valor igual considerando uma maior que a outra

Enviado: 08 Out 2015 20:22
por JoséQuintas
Anotei aqui.

Código: Selecionar todos

9.95 * ( 10 ^ 17 ) = 994999999999999700.0
tá multiplicando por 100000000000000000

variaveis de valor igual considerando uma maior que a outra

Enviado: 03 Nov 2015 19:56
por vagucs
lembrei de uma coisa, o SET DECIMAL ajuda a tratar esse mal pela raiz. kkk. tomara né.