Formatação decimal

Delphi

17/04/2013

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

Curtidas 0

Respostas

Renildo Antonio

Renildo Antonio

17/04/2013

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.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

17/04/2013

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

GOSTEI 0
Joel Rodrigues

Joel Rodrigues

17/04/2013

Estou movendo este tópico para a sala de Delphi.
GOSTEI 0
Renildo Antonio

Renildo Antonio

17/04/2013

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.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

17/04/2013

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

Dirceu Morais

17/04/2013

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.

GOSTEI 0
Dirceu Morais

Dirceu Morais

17/04/2013

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.

GOSTEI 0
Joel Rodrigues

Joel Rodrigues

17/04/2013

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

Renildo Antonio

17/04/2013

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.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

17/04/2013

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

Renildo Antonio

17/04/2013

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.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

17/04/2013

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?
GOSTEI 0
Renildo Antonio

Renildo Antonio

17/04/2013

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?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

17/04/2013

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

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


Tá errado aí, não?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

17/04/2013

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

GOSTEI 0
Renildo Antonio

Renildo Antonio

17/04/2013

Ok. Errei ao digitar aqui para você.

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


Segue o que estou usando:

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

Joel Rodrigues

17/04/2013

TEstou o que eu indiquei?
A questão não está na função de formatação. O que está havendo, ao meu ver, é confusão sobre onde colocar cada código. Provavelmente, em uma dessas tentativas de correção, um dos edits está VAZIO ou com um valor inválido.
GOSTEI 0
Renildo Antonio

Renildo Antonio

17/04/2013

Sim. Estamos quase chegando lá. Quando eu usei o código no OnExit do BDEdit2 o valor 1234 ficou assim: 1.234,00, porém não aparece nenhum valor em BDEdit3 - Fica em branco o campo.
Ai coloquei o código em OnEnter de BDEdit3 deu certo, porém o campo (BDEdit2) fica com duas casas decimais e logo ao sair do BDEdit3 o BDEdit2 perde todo o formato decimal, passando a ficar assim: 1234

E agora!?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

17/04/2013

É que você está usando aquele FloatToStr, substitua pelo FormatFloat, conforme eu sugeri.
GOSTEI 0
Renildo Antonio

Renildo Antonio

17/04/2013

Se está falando do código que usei no DBEdit2 anteriormente, antes de usar o código que me indicou eu apaguei.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

17/04/2013

Amigo, mostre como está os eventos OnExit e OnEnter dos DBEdits. O código completo desses eventos atualmente.
GOSTEI 0
Renildo Antonio

Renildo Antonio

17/04/2013

Amigo, segue ai:

BDEdit2 - OnExit: Em branco
BDEdit2 - OnEnter: Em branco


BDEdit3 - OnExit: Em branco

BDEdit3 - OnEnter:

procedure TForm2.DBEdit3Enter(Sender: TObject);
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

end;
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

17/04/2013

Se não tem nenhum código passando valor para o dBEdit2, não vejo por que seu texto estar sendo alterado ao sair do DBEdit3. Verifique se em algum outro lugar você está alterando o texto do DBEdit2.
GOSTEI 0
Renildo Antonio

Renildo Antonio

17/04/2013

Amigão, não encontrei nada que possa estar fazendo esta alteração. Portanto resolvi passar algumas outra informações referente aos BDEdits do projeto. Talvez isso possa ajudar a encontrar o que está acontecendo.

Lá no banco de dados (Access) os campos "Salarios" e "VlrHoraTrab" estão como texto.

object DBEdit2: TDBEdit
Left = 243
Top = 80
Width = 95
Height = 21
DataField = 'Salário'
DataSource = DataSource1
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
TabOrder = 5

object DBEdit3: TDBEdit
Left = 431
Top = 80
Width = 95
Height = 21
DataField = 'VlrHoraTrab'
DataSource = DataSource1
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
TabOrder = 6
OnEnter = DBEdit26Enter


GOSTEI 0
Joel Rodrigues

Joel Rodrigues

17/04/2013

Não, amigo. Isso não ajuda muito.
Vamos apelar. Copie TODO o código da sua unit no PasteBin. [url]http://pastebin.com/[/url]
Selecione "Syntax Highlighting: Delphi", clique em Submit e me mande o link.
GOSTEI 0
Renildo Antonio

Renildo Antonio

17/04/2013

Amigo, bom dia.

O código que você enviou não está errado. Como descobri isso? Deixei de lado o meu projeto e criei um novo e nele deu tudo certo. Não sei o que estava dando errado no outro. O que fiz? exclui os BDEdit que estava dando este erro e inseri dois novos. Usei sua dica e deu certo. Fique ontem até muito tarde da noite em busca de uma resolução para isso, mas não consegui. Foi ai que decidi excluir-os e inserir novamente.

Agora eu só tenho que te agradecer. Muitíssimo Obrigado pela força.
Peço desculpas se em algum momento te atrapalhei.
Mais uma vez muito obrigado. E se possível espero poder contar com você em outras dúvidas.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

17/04/2013

Atrapalhar que nada, amigo... fico feliz que tenha dado certo. Eu é que já estava ficando preocupado com esse negócio não estar dando certo. Mas acontece...
Então, estou marcando este tópico como Concluído.
Um abraço e o que precisar, é só falar.
GOSTEI 0
POSTAR