Fórum Campo Float Firebird #351563
08/01/2008
0
Estou com problemas com campo Float no Firebird 1.5. Quando tento gravar o número ´282236,93´ ele grava como 282236,938. Ai complica tudo, porque faço o arredondamento quando vou buscar esse valor no banco e ele passa a ficar como se fosse 282236,94 na minha aplicação. Não posso mudar esse campo para Numeric nesse projeto.
Alguem pode me ajudar a resolver esse dilema?
Danilodcf
Curtir tópico
+ 0Posts
08/01/2008
Sirologic
abraços
Sidnei Roberto
Jampa/PB 8)
Gostei + 0
09/01/2008
Danilodcf
Gostei + 0
10/01/2008
Onjahyr
Gostei + 0
10/01/2008
Danilodcf
Gostei + 0
11/01/2008
Onjahyr
Veja bem, o que vc tem que se preocupar é no seu programa!
No seu programa, use a propriedade Display Format e informar nela:
[b:33e0474f87]#,0.00[/b:33e0474f87]
Então, sempre que o componente for pegar os dados no seu banco, só vai trazer com duas casas decimais apenas, o restante será ignorado, entendeu? Já no Firebird, se tiver 200 casas decimais, do que importa? Importaria se você fosse trabalhar com finanças como posto de gasolina que quer saber o valor real do combustível que seria (um exemplo) de R$ 1,3408 ou se você utilizar o Firebird como no Access, mas no seu caso você vai usar dentro da sua aplicação.
Blz?
Gostei + 0
11/01/2008
Onjahyr
Andei pesquisando na internet e encontrei essa função: Vê se funciona aí, mas avisa se funcionou ou não:
Use
FloatToStrF(Numero, Formato, precisão, decimais)
onde:
Numero: O numero que deseja converter
Formato: Formato a ser usado. Use ffNumber (para outros formatos, leia o help da
funcao)
precisão: A precisão decimal que deve ser levado em consideração. Eu uso
normalmente 15
decimais: número de casas decimais que desejo converter. Aqui vc pode
especificar 3, 4, 5, ou quantas for necessário.
Para maiores informações, leia o help da função FloatToStrF
Gostei + 0
11/01/2008
Danilodcf
Imagine uma situação: Voce tem uma tabela de lancamentos Financeiro, voce faz um derteminado lancamento com o valor de 282236,93, ate ai tranquilo. voce vai trazer esse registro para sua aplicacao e ele te traz 282236,94, sua aplicação já está errada, Ok?
Já tentei usar FormatFloat(´,0.00´, Field), ja formatei de direto no ClientDataSet e nao deu certo. O Firebird sempre grava os valores Float com valores aproximados, tipo 358,30 = 358,2999999, e sempre traz o valor correto para aplicacao (358,30). Essa tabela ja tem mais de 80.000 registros e somente apresenta esse erro quando gravo esse valor especifico 282236,93. Tente criar uma tabela com o campo float e coloque esse valor e puxe pelo delhi que voce vai entender qual é o meu problema.
Gostei + 0
11/01/2008
Danilodcf
Gostei + 0
13/01/2008
Onjahyr
----------------------------------------------------------------
Para gravar com duas casas decimais voce pode mudar o tipo do campo de ´float´ para ´numeric´ ex: ´numeric(15,2)´ este tipo define q quantidade de casas decimais.
mas se deseja somente visualizar com duas casas decimais, utilize na hora do select a funcao ´cast´ do firebird.
ex:
select cast(campofloat as numeric(15,2))
from tabela
espero ter ajudado...
----------------------------------------------------------------
Também espero ter te ajudado!
Blz.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)