Fórum variável de valores #258320
13/11/2004
tenho uma variável Double, e coloquei um if para verificar se o valor dessa variável é maior ou igual a um campo de tabela q contem um valor ex:
if WValor >= TbContaValor.Value then
o problema é q a variável estando igual ao valor do campo da tabela a verificação fica false, e deveria ficar True, o q pode ser?
Posts
13/11/2004
Bruno Belchior
tente usar o tipo real, pois o tipo double é muio precizo
Armazene os dois valores em variáveis. Declare às variáveis com o mesmo tipo.
if (WValor >= ContaValor) then
Valores em ponto flutuante (Single, Double ou Extended) se caracterizam por nem sempre representar de forma exata o valor, por exemplo, ao invés de armazenar 1.5 armazenam 1.499999999999999 . É comum nos fóruns o pessoal reclamar que (1 / 3) * 3 1 e coisas similares.
No seu caso existe a possibilidade de estar ocorrendo isso... especialmente se WValor for resultado de algum cálculo.
O jeito de contornar isso é incluir uma margem de erro na comparação dos valores ou, se forem valores monetários, você pode tentar usar o tipo de dado Currency.
Alterei para Real a variável e criei uma para receber o valor pago tb, mais mesmo assim continua o problema, e estou verificando com F8 cada vez q passa pelo if com a verificação, e as duas variáveis estão idênticas, e redondas, não aparece nenum valor quebrado. :lol:
olha q estranho, eu somei 0.01 centavo a mais na variavel WValor e verifiquei com F8 conforme passava por ela, e estava com o valor + 0.02 centavos, e se eu não colocar nada ela fica redonda mais na realidade ela já está com 0.01 a mais. Essa variável recebe um valor digitado em um edit q significa o valor total q a pessoa quer baixar, e tem um while q vai passando pela tabela de contas a pagar e baixando até q zere a variável WValor, por isso vou verificando se a WValor é >= ao valor da conta, só q qdo passa pelo if a WValor está com um centavo a mais e o if fica false.
Agora deu certo, eu criei as variáveis currency q é o q estou usando no campo valor. :D