Ajuda com Valores floats...

20/02/2006

Olá

tenho um banco de dados mysql... e a tabela que eu tenho é o seguinte


Codigo Descricao data valor
220 dolar 2005-01-01 1.90
221 euro 2005-01-01 1.50


quando eu mando lista todos os dados da tabela na grid, o valor sai como 1.4999882.... so que no banco de dados ele esta 1.50.... ai fiz o seguinte comando:
TNumericField(Datamodule1.ZQuery1.FieldByName(´valor´)).DisplayFormat := ´,0.00;-,0.00´;

ele na grid mostra correto... so que no evento TForm1.DBGrid1DblClick(Sender: TObject);

Form1.EdtValor.Text:= Datamodule1.ZQuery1.fieldbyname(´valor´).Asstring;

ele traz os edits tudo como 1.4999882... ou seja ele nao traz o que ta na grid....


como eu faço pra ele trazer o que esta na grid exatamente ?

grato


Fernando_cunha

Respostas

20/02/2006

Rod8

qual o tipo do campo valor ?


Responder Citar

20/02/2006

Fernando_cunha

Float


Responder Citar

20/02/2006

Paullsoftware

Float


Clique duas vezes no componente Table/Query selecione o campo Float e no Object Inspector mude a propriedade Currency para True...

espero ter ajudado! :wink:


Responder Citar

21/02/2006

Paulo

Nao conheco bem o MySql, mas tive problemas semelhantes com SQL Server. Percebi que o campo Float, é um numero que internamente, ele tem varias casas decimais como precisão. Dai eu nao usar campos Float, quando preciso usar mascaras formatadas com 2 ou 3 casas decimais. No Sql Server, uso o [color=red:b5f4c74fc8]Numeric(12,2)[/color:b5f4c74fc8], já mascarado no banco, o que nunca me deu mais problemas, como posso uasar o Money(Nao e o mesmo da mascara Currency, citado acima). Em FireBird, uso o Double Precision. Caso vc tenha que fazer calculos com esse numero e depois te dar o resultado, nao te aconselho a usar a Mascara CURRENCY, conforme o PaullSoftware te recomendou. Mude o tipo de campo, caso o MySql te permita, ou use um [color=red:b5f4c74fc8]FloatToStrf(valor, ffNumber, 12,2)[/color:b5f4c74fc8], para carregar dentro do Edit, o que te mascararia com vc quer. Lembrando, que por ser um numero Flutuante, é possível, que te de um resultado diferente do que vc quer, no caso de Cálculo. Eu disse que é possível, mas não afirmei, por isso cara, faca variuso testes para ter a certeza que os calculo estao corretos. Qualquer coisa, poste mais.


Responder Citar

21/02/2006

Fernando_cunha

obrigado pela ajuda pessoal....
PaullSoftware Escreveu: Clique duas vezes no componente Table/Query selecione o campo Float e no Object Inspector mude a propriedade Currency para True... espero ter ajudado!


PaullSoftware, eu não posso fazer assim pois possuo uma unica query para todas as minhas tabelas... e ao carregar o form eu faço o seguinte


DbGrid1.DataSource:=DataModule1.DtsProcurar;
DataModule1.ZQuery1.SQL.Clear;
DataModule1.ZQuery1.SQL.Add(´SELECT * FROM taxa´);
Datamodule1.ZQuery1.open;
TNumericField(Datamodule1.ZQuery1.FieldByName(´valor´)).DisplayFormat := ´,0.00;-,0.00´;



Dbgrid1.Columns[0&93;.FieldName:=´cod_taxa´;
Dbgrid1.Columns&91;0&93;.Width:=40;
Dbgrid1.Columns&91;0&93;.Title.caption:=´Código´;

Dbgrid1.Columns&91;1&93;.FieldName:=´descricao´;
Dbgrid1.Columns[1&93;.Width:=130;
Dbgrid1.Columns&91;1&93;.Title.caption:=´Descrição´;

Dbgrid1.Columns&91;2&93;.FieldName:=´valor´;
Dbgrid1.Columns&91;2&93;.Width:=102;
Dbgrid1.Columns&91;2&93;.Title.caption:=´Valor´;


e Paulo, eu realmente tive que testar varios formatos de mascara... até que deixei na ´decimal´ ele traz lá o valor 1,56 normal ... o problema agora esta sendo quando tem zero no final... tipo o valor é 1,20 ele so me traz 1,2

obrigado pela ajuda anteriormente... agora eu so preciso trazer o bendito 0 no final....

abraços


Responder Citar

21/02/2006

Paullsoftware

você não pode tentar um FormatFloat(´#,,0.00´,CampoFloat)??


Responder Citar

21/02/2006

Fernando_cunha

bom eu coloquei o comando no exit do edit e nao vai...

coloquei tambem logo quando trago os valores da grid pro edit e tbm nao vai... ele ja traz 1,2 ... sem o zero... ai ele nao consegue converter nada


Responder Citar

22/02/2006

Fernando_cunha

Ola

algum poderia me ajudar ???
nao estou conseguindo mesmo :( vou postar os codigo inteiro pra ver se ajuda alguma coisa

o detalhe que no banco esta 1.20... e na grid traz 1.20.... so que quando puxo pro edit ele so traz 1.2 ele corta o 0....

algum plz ajuda... pois estou com problema neste form... mas possuo mais 5 forms com valores q provavelmente ta com mesmo problema...



grato

procedure TFrmProcurarTaxa.FormActivate(Sender: TObject);
begin
DbGrid1.DataSource:=DataModule1.DtsProcurar;
DataModule1.ZQuery1.SQL.Clear;
DataModule1.ZQuery1.SQL.Add(´SELECT * FROM taxa´);
Datamodule1.ZQuery1.open;
TNumericField(Datamodule1.ZQuery1.FieldByName(´valor´)).DisplayFormat := ´,0.00;-,0.00´;

Dbgrid1.Columns[0&93;.FieldName:=´cod_taxa´;
Dbgrid1.Columns&91;0&93;.Width:=40;
Dbgrid1.Columns&91;0&93;.Title.caption:=´Código´;

Dbgrid1.Columns[1&93;.FieldName:=´descricao´;
Dbgrid1.Columns&91;1&93;.Width:=130;
Dbgrid1.Columns&91;1&93;.Title.caption:=´Descrição´;

Dbgrid1.Columns&91;2&93;.FieldName:=´valor´;
Dbgrid1.Columns&91;2&93;.Width:=102;
Dbgrid1.Columns&91;2&93;.Title.caption:=´Valor´;

end;


procedure TFrmProcurarTaxa.DBGrid1DblClick(Sender: TObject);
begin

Frmtaxa.EdtCodigo.Text:= DataModule1.ZQuery1.fieldbyname(´cod_taxa´).AsString;
Frmtaxa.EdtDescricao.Text:= DataModule1.ZQuery1.fieldbyname(´descricao´).AsString;
Frmtaxa.EdtValor.Text:= Datamodule1.ZQuery1.fieldbyname(´valor´).Asstring;
close;
end;



Responder Citar

22/02/2006

Fernando_cunha

ola pessoal.

consegui resolver o problema.


ficou da seguinte maneira...


procedure TFrmProcurarTaxa.FormActivate(Sender: TObject);
begin
DbGrid1.DataSource:=DataModule1.DtsProcurar;
DataModule1.ZQuery1.SQL.Clear;
DataModule1.ZQuery1.SQL.Add(´SELECT * FROM taxa´);
Datamodule1.ZQuery1.open;
TNumericField(Datamodule1.ZQuery1.FieldByName(´valor´)).DisplayFormat := ´,0.00;-,0.00´;



Dbgrid1.Columns[0&93;.FieldName:=´cod_taxa´;
Dbgrid1.Columns&91;0&93;.Width:=40;
Dbgrid1.Columns&91;0&93;.Title.caption:=´Código´;

Dbgrid1.Columns&91;1&93;.FieldName:=´descricao´;
Dbgrid1.Columns&91;1&93;.Width:=130;
Dbgrid1.Columns&91;1&93;.Title.caption:=´Descrição´;

Dbgrid1.Columns&91;2&93;.FieldName:=´valor´;
Dbgrid1.Columns&91;2&93;.Width:=102;
Dbgrid1.Columns&91;2&93;.Title.caption:=´Valor´;

end;

procedure TFrmProcurarTaxa.DBGrid1DblClick(Sender: TObject);
begin

Frmtaxa.EdtCodigo.Text:= DataModule1.ZQuery1.fieldbyname(´cod_taxa´).AsString;
Frmtaxa.EdtDescricao.Text:= DataModule1.ZQuery1.fieldbyname(´descricao´).AsString;
Frmtaxa.EdtValor.Text:= FormatFloat(´0.00´, StrToFloat(Datamodule1.ZQuery1.fieldbyname(´valor´).AsString));

close;
end;


Obrigado pela ajuda de todos.


Responder Citar