 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
stammer Novato

Registrado: Quinta-Feira, 1 de Novembro de 2007 Mensagens: 52
|
Enviada: Seg Mai 10, 2010 8:06 am Assunto: Firebird (double precision) x Delphi AsFloat [Resolvido] |
|
|
Estou com um problema.
Tenho campos double precision numa base de dados firebird.
Estou tentando inserir/alterar dados na tabela com esses campos, usando o componente IBSQL da paleta Interbase, passando os valores por parâmetro.
Esses campos devem ser gravados com 4 casas decimais, nem mais, nem menos (menos só sse houver zeros).
O problema é que ao passar por parâmetro o valor (usando ParamByName('CAMPO').AsFloat), o delphi gera mais de casas decimais, gerando números que eu não quero... ex 19,4567230004567356.
Como posso passar esse valor por parâmetro sem que o delphi não altere o valor (com 4 casas decimais)?
Já tentei função de arredondamento, AsCurrency(gera somente 2 casas) e nada funciona.... alguém pode me ajudar?
Obs: Não posso alterar o tipo de campo na base e o valor deve ser passado por parâmetro.
Editado pela última vez por stammer em Seg Mai 10, 2010 9:07 am, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
stammer Novato

Registrado: Quinta-Feira, 1 de Novembro de 2007 Mensagens: 52
|
Enviada: Seg Mai 10, 2010 9:06 am Assunto: |
|
|
Eu mesmo acabei encontrando uma solução para o problema fazendo algumas pesquisas.... a solução foi a seguinte:
deve declarar FMTBcd no Uses
Para passar o parâmetro sem mudar o valor passado, faça o seguinte
ParamByName('CampoDoublePrecision').AsBcd := DoubleToBcd(ValorComCasasDecimais);
Assim evita-se que seja gerado na base um número com casas decimais que você não gerou na aplicação. |
|
| Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Seg Mai 10, 2010 9:13 am Assunto: |
|
|
O double precision é como nosso velho conhecido do delphi o tipo double, tem precisão dupla e obedece as normas do IEEE - Instituto de Engenheiros Eletricistas e Eletrônicos, utilizando o co-processador matemático para fazer os calculos em vista de acelerá-los.
No caso o melhor no firebird é utilizar o tipo Numeric(15,2) ou ajustá-lo às suas necessidades.
Mas no caso de vc nao querer fazê-lo vc pode utilizar currency que é o correto para operaçoes financeiras, digo AsCurrency.
bye _________________ P.O.W.E.R B.Y D.E.L.P.H.I |
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|