RESULTADO DE CALCULO DOIDO
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.
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.
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
mais tenta alguma coisa diferente... nao faz muito sentindo
vDiferenca = formatnumber(cdbl(vValor) - cdbl(vValorAnterior),2)
msgbox vDiferenca
ve ai o q acontece
O correto seria:
383.94 - 383.94 = 0
Ou seja, não trabalhar com "," com número DBL.
383.94 - 383.94 = 0
Ou seja, não trabalhar com "," com número DBL.
verdade... retorna 0 e nao "2,27373675443232E-13"
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
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
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]
Eu sempre coloco tudo dentro de um format [S79]
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.
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.
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.
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.
Cara.. na pior das hipóteses cria uma dll em c ou c++..rsrssrsrs
Tópico encerrado , respostas não são mais permitidas