Erros com números decimais
Galera, possuo o código abaixo que transfere os dados de uma query para outra:
var
mValorPago : Double;
mValor : Currency;
qryPagamentos.DisableControls;
qryPagamentos.First;
qryTemp.Open;
mValorPago := 0;
while not qryPagamentos.Eof do
Begin
if qryPagamentosMarcado.AsString = ´X´ Then
Begin
mValor := qryPagamentosValor.AsCurrency;
qryTemp.Append;
qryTempNrFinanContaPag.AsString := qryPagamentosNrFinanContaPag.AsString;
qryTempCdUsuaLanc.AsString := qryPagamentosCdUsuaLanc.ASString;
qryTempDtVencto.AsDateTime := qryPagamentosDtVencto.AsDateTime;
qryTempValor.AsCurrency := mValor;
qryTempObs.Assign( qryPagamentosObs );
qryTempPara.AsString := qryPagamentosPara.AsString;
qryTempNmPara.AsString := qryPagamentosNmPara.AsString;
qryTempStatus.AsString := qryPagamentosStatus.AsString;
qryTempDtPagto.AsDateTime := qryPagamentosDtPagto.AsDateTime;
qryTempConta.AsString := qryPagamentosConta.AsString;
qryTempNumCheque.AsString := qryPagamentosNumCheque.AsString;
qryTempTpPagto.AsString := qryPagamentosTpPagto.AsString;
qryTempCdUsuaPagto.AsString := qryPagamentosCdUsuaPagto.AsString;
qryTempCodCat.AsString := qryPagamentosCodCat.AsString;
qryTempCodSubCat.AsString := qryPagamentosCodSubCat.AsString;
qryTempCodContaDesc.AsString := qryPagamentosCodContaDesc.AsString;
qryTempDtInc.AsDateTime := qryPagamentosDtInc.AsDateTime;
qryTempTpPagtoEsco.AsString := qryPagamentosTpPagtoEsco.AsString;
qryTempHora.AsString := qryPagamentosHora.AsString;
qryTempNF.AsString := qryPagamentosNF.AsString;
qryTempNrParc.AsString := qryPagamentosNrParc.AsString;
qryTempCdEmp.AsString := qryPagamentosCdEmp.AsString;
qryTempVlPagto.AsCurrency := mValor;
qryTempDtCompensado.AsDateTime := qryPagamentosDtCompensado.AsDateTime;
qryTempSaldo.AsFloat := qryPagamentosSaldo.AsFloat;
qryTempDescConta.AsString := qryPagamentosDescConta.AsString;
qryTempNmTransf.AsString := qryPagamentosNmTransf.AsString;
qryTempDescCodSub.AsString := qryPagamentosDescCodSub.AsString;
qryTempDescCodCat.AsString := qryPagamentosDescCodCat.AsString;
qryTempNmEmp.AsString := qryPagamentosNmEmp.AsString;
mValorPago := mValorPago + qryPagamentosValor.AsFloat;
End;
qryPagamentos.Next;
End;
mas ele tem alguma coisa estranha que nao identifiquei.
os campos VlPagto e Valor da qryTemp nao estao ficando com o valor da variavel mValor.
Exemplo tenho um valor de 1541.87
Quando ele joga na qryTemp ele fica com 1541.86
O que pode estar acontecendo?
Abraços
var
mValorPago : Double;
mValor : Currency;
qryPagamentos.DisableControls;
qryPagamentos.First;
qryTemp.Open;
mValorPago := 0;
while not qryPagamentos.Eof do
Begin
if qryPagamentosMarcado.AsString = ´X´ Then
Begin
mValor := qryPagamentosValor.AsCurrency;
qryTemp.Append;
qryTempNrFinanContaPag.AsString := qryPagamentosNrFinanContaPag.AsString;
qryTempCdUsuaLanc.AsString := qryPagamentosCdUsuaLanc.ASString;
qryTempDtVencto.AsDateTime := qryPagamentosDtVencto.AsDateTime;
qryTempValor.AsCurrency := mValor;
qryTempObs.Assign( qryPagamentosObs );
qryTempPara.AsString := qryPagamentosPara.AsString;
qryTempNmPara.AsString := qryPagamentosNmPara.AsString;
qryTempStatus.AsString := qryPagamentosStatus.AsString;
qryTempDtPagto.AsDateTime := qryPagamentosDtPagto.AsDateTime;
qryTempConta.AsString := qryPagamentosConta.AsString;
qryTempNumCheque.AsString := qryPagamentosNumCheque.AsString;
qryTempTpPagto.AsString := qryPagamentosTpPagto.AsString;
qryTempCdUsuaPagto.AsString := qryPagamentosCdUsuaPagto.AsString;
qryTempCodCat.AsString := qryPagamentosCodCat.AsString;
qryTempCodSubCat.AsString := qryPagamentosCodSubCat.AsString;
qryTempCodContaDesc.AsString := qryPagamentosCodContaDesc.AsString;
qryTempDtInc.AsDateTime := qryPagamentosDtInc.AsDateTime;
qryTempTpPagtoEsco.AsString := qryPagamentosTpPagtoEsco.AsString;
qryTempHora.AsString := qryPagamentosHora.AsString;
qryTempNF.AsString := qryPagamentosNF.AsString;
qryTempNrParc.AsString := qryPagamentosNrParc.AsString;
qryTempCdEmp.AsString := qryPagamentosCdEmp.AsString;
qryTempVlPagto.AsCurrency := mValor;
qryTempDtCompensado.AsDateTime := qryPagamentosDtCompensado.AsDateTime;
qryTempSaldo.AsFloat := qryPagamentosSaldo.AsFloat;
qryTempDescConta.AsString := qryPagamentosDescConta.AsString;
qryTempNmTransf.AsString := qryPagamentosNmTransf.AsString;
qryTempDescCodSub.AsString := qryPagamentosDescCodSub.AsString;
qryTempDescCodCat.AsString := qryPagamentosDescCodCat.AsString;
qryTempNmEmp.AsString := qryPagamentosNmEmp.AsString;
mValorPago := mValorPago + qryPagamentosValor.AsFloat;
End;
qryPagamentos.Next;
End;
mas ele tem alguma coisa estranha que nao identifiquei.
os campos VlPagto e Valor da qryTemp nao estao ficando com o valor da variavel mValor.
Exemplo tenho um valor de 1541.87
Quando ele joga na qryTemp ele fica com 1541.86
O que pode estar acontecendo?
Abraços
Tremonti
Curtidas 0
Respostas
Tremonti
10/01/2007
Meu campo no banco de dados é decimal(15,2)
já utilizei o Assign e mesmo assim não deu certo
Por favor me ajudem!
já utilizei o Assign e mesmo assim não deu certo
Por favor me ajudem!
GOSTEI 0
Aroldo Zanela
10/01/2007
Colega,
Quando for trabalhar com valores monetários, as variáveis devem ser declaradas exclusivamente do tipo [b:c04f6ecb7d]currency[/b:c04f6ecb7d]. Porcure aqui no fórum sobre mantissa e armazenamento de números de ponto flutuando no google que você entenderá o motivo.
Quando for trabalhar com valores monetários, as variáveis devem ser declaradas exclusivamente do tipo [b:c04f6ecb7d]currency[/b:c04f6ecb7d]. Porcure aqui no fórum sobre mantissa e armazenamento de números de ponto flutuando no google que você entenderá o motivo.
GOSTEI 0
Emerson Nascimento
10/01/2007
colega, fora a falta da linha [i:977e6e5f4e]qryTemp.Post[/i:977e6e5f4e] como última linha do [i:977e6e5f4e]if[/i:977e6e5f4e], não percebi qualquer problema.
para certificar-se dos valores gravados, exiba o valor do campo é o valor da variável.
algo assim:
mValor := qryPagamentosValor.AsCurrency;
ShowMessage( FloatToStr( qryPagamentosValor.AsFloat ) );
ShowMessage( FloatToStr( mValor ) );
[i:977e6e5f4e].AsFloat[/i:977e6e5f4e] mesmo, pra você poder certificar-se do valor que realmente está no campo.
para certificar-se dos valores gravados, exiba o valor do campo é o valor da variável.
algo assim:
mValor := qryPagamentosValor.AsCurrency;
ShowMessage( FloatToStr( qryPagamentosValor.AsFloat ) );
ShowMessage( FloatToStr( mValor ) );
[i:977e6e5f4e].AsFloat[/i:977e6e5f4e] mesmo, pra você poder certificar-se do valor que realmente está no campo.
GOSTEI 0
Tremonti
10/01/2007
Aroldo, vou dar uma olhada no que disse.
Emerson, aí que é estranho aparentemente está tudo correto, mas se for debugado, ele tira exatamente 0,01.
Muito estranho...
Emerson, aí que é estranho aparentemente está tudo correto, mas se for debugado, ele tira exatamente 0,01.
Muito estranho...
GOSTEI 0