GARANTIR DESCONTO

Fórum Valores decimais iguais, quando comparado se são iguais o delphi entendi como diferente #418139

06/06/2012

0

Senhores,

estou com um problema Chato pra resolver..

eu tenho um valor de titulo somado com juros Ex.: valor recebibo (T=24.00 + J=2.00) = 26.00 e tenho um valor fixo a receber de 26.00

a minha condição para efetivar o recebimento é que.
valor recebido >= valor a receber.. ate aqui tudo bem.. porém quando vou efetivar o recebimento o delphi acusa que o valor é diferente e so entra na condição recebimento := N.

Ex. codigo:
if valrecebido >= valreceber then
begin
recebimento := S
end
else recebimento := N;


como faço p resolver isso?

desde já agradeço a quem poder me ajudar...

Jesus Lima

Jesus Lima

Responder

Posts

06/06/2012

Marco Salles

Como esta declarado essas Variáveis ????

Qual o tipo ???
Responder

Gostei + 0

06/06/2012

Joel Rodrigues

Amigo, esse tipo de coisa acontece às vezes. Pode acontecer de um valor ser 26.00000000001 e o outro 26.00, logo, diferentes. Você pode usar arredondamentos (existem funções pra isso) para usar apenas duas casas decimais, por exemplo, além de sempre utilizar o mesmo tipo de dados.
Responder

Gostei + 0

07/06/2012

Marcos Roberto

Função para arredondamento

RoundTo(Avalue,Adigit);
- arredondar números com casas decimais. Também utiliza o arredondamento do banqueiro.

Parâmetros:
Avalue: Valor a ser arredondado.
Adigit: Na prática é a quantidade de dígitos que se deseja arredondar Avalue. Por exemplo, se você deseja arredondar um valor que possui três casas decimais para um novo valor com duas casas decimais, então informe nesse parâmetro o valor -2.
Adigit aceita valores entre -37 a 37(inclusive).

Exemplos:
RoundTo (1.234, -2); //retorna 1.23
RoundTo (1.235, -2); //retorna 1.24
RoundTo (1.245, -2); //retorna 1.24


valeu!
Responder

Gostei + 0

07/06/2012

Marco Salles

Bem as vezes so alterando o tipo de declaração das variáveis resolve

Mas como nossos amigos ja adiantaram em algumas funções para esta finalidade , gosto muito
da função SameValue da Unidade Math


veja a sua assinatura

function SameValue(const A, B: Extended; Epsilon: Extended): Boolean;
begin
if Epsilon = 0 then
Epsilon := Max(Min(Abs(A), Abs(B)) * ExtendedResolution, ExtendedResolution);
if A > B then
Result := (A - B) <= Epsilon
else
Result := (B - A) <= Epsilon;
end;
Responder

Gostei + 0

08/06/2012

Pablo Vargas

Ja tive esse problema também, e nem com funções de arredondamento consegui resolver, tive que apelar para uma solução de contorno

tipo

1º: multiplica tuas variáveis por 100
2º: faça um Trunc, tirando o que ficar de casas decimais
3º: divida por 100
4º: compare suas variáveis

confesso não ser uma solução elegante, mas te garanto que funciona.
Responder

Gostei + 0

11/06/2012

Jesus Lima

Amigos muito obrigado pelas respostas... realmente todas as soluções funcionaram... e o problema realmente era casas decimais porem o estranho é que o delphi não mostrava o erro...

mesmo assim obrigado pela ajuda de todos...
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar