Formatação decimal

17/04/2013

0

Preciso formatar o valor de um DBEdit em decimal conforme abaixo. No projeto eu tenho os seguintes campos:

Salário (DBEdit2) = 1234,00
Vlr. Hora Trabalhada (DBEdit3).

No evento OnEnter do DBEdit3 entrei com o seguinte código:

procedure TForm1.DBEdit3Enter(Sender: TObject);
var
valor: double;
begin
valor := StrtoFloat(Dbedit2.text);
Dbedit3.text := FloattoStr(valor / 220);

end;

No evento OnExit do DBEdit3 eu usei o código: DBEdit3.Text:= FormatFloat('00000.00',StrToInt(DBEdit3.Text))

Usei tudo isso mas não está dando certo. Sempre vem uma mensagem dizendo que o valor não é flutuante.

Como devo proceder? Alguem pode me ajudar?
Renildo Antonio

Renildo Antonio

Responder

Posts

17/04/2013

Renildo Antonio

Preciso formatar o valor de um DBEdit em decimal conforme abaixo. No projeto eu tenho os seguintes campos:

Salário (DBEdit2) = 1234,00
Vlr. Hora Trabalhada (DBEdit3).

No evento OnEnter do DBEdit3 entrei com o seguinte código:

procedure TForm1.DBEdit3Enter(Sender: TObject);
var
valor: double;
begin
valor := StrtoFloat(Dbedit2.text);
Dbedit3.text := FloattoStr(valor / 220);

end;

No evento OnExit do DBEdit3 eu usei o código: DBEdit3.Text:= FormatFloat('00000.00',StrToInt(DBEdit3.Text))

Usei tudo isso mas não está dando certo. Sempre vem uma mensagem dizendo que o valor não é flutuante.

Como devo proceder? Alguem pode me ajudar?

Eu estou usando um ADOTable/Access.
Responder

17/04/2013

Joel Rodrigues

Tente o seguinte:
DBEdit3.Text := FormatFloat('#,##0.00', StrToFloat(DBEdit3.Text));

Responder

17/04/2013

Joel Rodrigues

Estou movendo este tópico para a sala de Delphi.
Responder

17/04/2013

Renildo Antonio

Caro Joel, já usei este código que você me passou. Dá certo até certo ponto. Se digito um valor até 999,99 vai tudo bem. Mas se digito um valor como por exemplo: 1245,00, ou seja, acima de mil, ai surge uma mensagem erro informando que este valor não é flutuante.

Até 999,99 vai muito bem, passou dai não funciona.

já usei vários exemplo, mas nada até agora.

Um abraço.
Responder

17/04/2013

Joel Rodrigues

Rapaz, provavelmente o problema não está no valor digitado, mas sim no formato como ele foi digitado. Como você digitou esse 1234?
Responder

17/04/2013

Dirceu Morais

Caro Joel, já usei este código que você me passou. Dá certo até certo ponto. Se digito um valor até 999,99 vai tudo bem. Mas se digito um valor como por exemplo: 1245,00, ou seja, acima de mil, ai surge uma mensagem erro informando que este valor não é flutuante.

Até 999,99 vai muito bem, passou dai não funciona.

já usei vários exemplo, mas nada até agora.

Um abraço.


O Dbedit esta sendo passado como String 1245,00 ele deverá ser passado como Float 1245.00.

Responder

17/04/2013

Dirceu Morais

Caro Joel, já usei este código que você me passou. Dá certo até certo ponto. Se digito um valor até 999,99 vai tudo bem. Mas se digito um valor como por exemplo: 1245,00, ou seja, acima de mil, ai surge uma mensagem erro informando que este valor não é flutuante.

Até 999,99 vai muito bem, passou dai não funciona.

já usei vários exemplo, mas nada até agora.

Um abraço.


O Dbedit esta sendo passado como String 1245,00 ele deverá ser passado como Float 1245.00.

Responder

18/04/2013

Joel Rodrigues

Como eu estou sem o Delphi aqui para testar, experimente digitar os seguintes valores e veja qual dá erro:
1234
1234,00
1224.00
Responder

18/04/2013

Renildo Antonio

Joel,

De qualquer forma que digito 1234 dá errado. Qualquer número acima de mil dá erro.

No meu projeto o valor que tenho em DBEdit2 tem que ser dividido por 220 e o resultado da divisão tem que sair em DBEdit 3.
Ou seja, 1234 / 220 = 5,6090909090909090909090909090909

Eu preciso que 1234 fique assim: 1.234,00 (DBEdit2), e
5,6090909090909090909090909090909 tem que ficar assim: 5,60. Somente com dois dígitos depois da vírgula.

No meu banco de dados (Access) os campos estão como texto.

Gente me passa um código que me ajude a levar o meu projeto adiante.
Responder

18/04/2013

Joel Rodrigues

Rapaz, eu testei aqui com valores até maiores e deu certo. Tente depurar o código e ver onde está ocorrendo o erro.
Responder

18/04/2013

Renildo Antonio

Joel,

Meu Deus! O que será que está acontecendo então!?

Será que seria pedir muito eu pedir para você me passar o código completo que você usou? Quem sabe assim eu possa ver o que está ocorrendo aqui.

Antecipado agradeço.
Responder

18/04/2013

Joel Rodrigues

He he..eis a questão. Coloquei só um edit na tela e no OnExit dele coloquei exatamente esse código. Aqui formatou 1, 10 100, 1 milhão, etc. Já depurou o código? O erro ocorre realmente nessa linha?
Responder

18/04/2013

Renildo Antonio

Joel,

Também fiz e deu certo. Isso quando eu não uso a formula de divisão, quando não uso nenhuma operação aritmética. Se uso ai o trem bagunça tudo.
Eu preciso que tanto BDEdit2 e BDEdit3 tenha somente duas casas decimais. Repito, quando não faço operação aritmética tudo funciona, mas quando uso ai ja viu.

==> Em BDEdit2 eu coloquei assim:

procedure TForm2.DBEdit2Exit(Sender: TObject);
begin
DBEdit2.Text := FormatFloat('#,##0.00', StrToFloat(DBEdit3.Text));
end;

==> Em DBEdit3 eu coloquei assim:

procedure TForm2.DBEdit3Enter(Sender: TObject);
var m1: real;
begin
m1 := StrtoFloat(Dbedit2.text);

Dbedit3.text := FloatToStr(m1 / 220);
end;

Ou seja, onde estou errando?
Responder

18/04/2013

Joel Rodrigues

Opa, no DBEdit 2 você está exibindo o valor do DBEdit3:

DBEdit2.Text := FormatFloat('#,##0.00', StrToFloat(DBEdit3.Text));


Tá errado aí, não?
Responder

18/04/2013

Joel Rodrigues

Ao sair do DBEdit2 o DBEdit3 deve exibir aquele valor (m1/220)?
Se for, coloque o seguinte no evento OnExit do DBEdit2:
var m1: real;
begin
  m1 := StrtoFloat(DBEdit2.text);
  DBEdit2.text := FormatFloat('#,##0.00', m1);//formata o DBEdit2
  DBEdit3.text := FormatFloat('#,##0.00', m1 / 220);//formata o DBEdit3

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar