Ajuda com Valores floats...
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
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
Curtidas 0
Respostas
Rod8
20/02/2006
qual o tipo do campo valor ?
GOSTEI 0
Fernando_cunha
20/02/2006
Float
GOSTEI 0
Paullsoftware
20/02/2006
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:
GOSTEI 0
Paulo
20/02/2006
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.
GOSTEI 0
Fernando_cunha
20/02/2006
obrigado pela ajuda pessoal....
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
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
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].FieldName:=´cod_taxa´; Dbgrid1.Columns[0].Width:=40; Dbgrid1.Columns[0].Title.caption:=´Código´; Dbgrid1.Columns[1].FieldName:=´descricao´; Dbgrid1.Columns[1].Width:=130; Dbgrid1.Columns[1].Title.caption:=´Descrição´; Dbgrid1.Columns[2].FieldName:=´valor´; Dbgrid1.Columns[2].Width:=102; Dbgrid1.Columns[2].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
GOSTEI 0
Paullsoftware
20/02/2006
você não pode tentar um FormatFloat(´#,,0.00´,CampoFloat)??
GOSTEI 0
Fernando_cunha
20/02/2006
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
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
GOSTEI 0
Fernando_cunha
20/02/2006
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
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].FieldName:=´cod_taxa´; Dbgrid1.Columns[0].Width:=40; Dbgrid1.Columns[0].Title.caption:=´Código´; Dbgrid1.Columns[1].FieldName:=´descricao´; Dbgrid1.Columns[1].Width:=130; Dbgrid1.Columns[1].Title.caption:=´Descrição´; Dbgrid1.Columns[2].FieldName:=´valor´; Dbgrid1.Columns[2].Width:=102; Dbgrid1.Columns[2].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;
GOSTEI 0
Fernando_cunha
20/02/2006
ola pessoal.
consegui resolver o problema.
ficou da seguinte maneira...
Obrigado pela ajuda de todos.
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].FieldName:=´cod_taxa´; Dbgrid1.Columns[0].Width:=40; Dbgrid1.Columns[0].Title.caption:=´Código´; Dbgrid1.Columns[1].FieldName:=´descricao´; Dbgrid1.Columns[1].Width:=130; Dbgrid1.Columns[1].Title.caption:=´Descrição´; Dbgrid1.Columns[2].FieldName:=´valor´; Dbgrid1.Columns[2].Width:=102; Dbgrid1.Columns[2].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.
GOSTEI 0