RESULTADO DE CALCULO DOIDO

CLAUDIO1404 29/08/2007 09:30:40
#233181
Alguém saberia me dizer por que:

383,94 - 383,94 = 2,27373675443232E-13

?????????????????

A operação é a seguinte:

vDiferenca = vValor - vValorAnterior

Onde todos os campos são definidos como double.

O pior é que ele grava esse valor absurdo na tabela, mas quando eu recupero e formato este valor para #,##0.00 ele apresenta como 0,00 que seria o correto.

Como acaba ficando certo eu estava quase desistindo e deixando como está, mas vai que no futuro eu tenho que fazer algum cálculo com esse campo e ele fica errado.

Agradeço por qualquer idéia.

RODRIGOGBGOMES 29/08/2007 09:47:02
#233184
Resposta escolhida
hehe... chuta q é macumba... kkk to brincando.
mais tenta alguma coisa diferente... nao faz muito sentindo

vDiferenca = formatnumber(cdbl(vValor) - cdbl(vValorAnterior),2)
msgbox vDiferenca


ve ai o q acontece
USUARIO.EXCLUIDOS 29/08/2007 13:46:21
#233264
O correto seria:

383.94 - 383.94 = 0

Ou seja, não trabalhar com "," com número DBL.
RODRIGOGBGOMES 29/08/2007 17:55:59
#233324
verdade... retorna 0 e nao "2,27373675443232E-13"

ANGELO 30/08/2007 10:22:57
#233378
na verdade isso é resolvido se vc usar as variáveis corretamente.
se vc usa o variant para armazenar um valor e fizer uma operação com ele pode ser que de um resultado totalmente diferente.
Experimente declarar as variaveis como Double.
Ai vc não precisa converter.


Falow
WHELLNET 30/08/2007 12:47:46
#233414
O q li uma vez a muito tempo atrás é q que esse é um erro no proprio vb ao trabalhar com pontos flutuantes

Eu sempre coloco tudo dentro de um format [S79]
CLAUDIO1404 30/08/2007 15:39:04
#233441
Ok pessoal,
Vou testar aqui e depois encerro o tópico.
Na verdade os 2 campos estão declarados como double, mas o valor original vem de outro cálculo que possivelmente já está formatado.
Vamos ver...

Agradeço pelas postagens.


FFCOUTO 30/08/2007 17:25:15
#233460
dê uma pesquisa sobre o formati IEEE
o que acontece é que os números são formados por uma sequência binária. Quando o número não pode ser escrito de forma binária, é utilizado o número que mais se aproxima.

espero ter ajudado.
ANGELO 31/08/2007 13:44:30
#233610
Cara.. na pior das hipóteses cria uma dll em c ou c++..rsrssrsrs
Tópico encerrado , respostas não são mais permitidas