Formatação decimal
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?
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
Curtidas 0
Respostas
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.
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
17/04/2013
Tente o seguinte:
DBEdit3.Text := FormatFloat('#,##0.00', StrToFloat(DBEdit3.Text));
GOSTEI 0
Joel Rodrigues
17/04/2013
Estou movendo este tópico para a sala de Delphi.
GOSTEI 0
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.
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
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
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.
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
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.
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
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
1234
1234,00
1224.00
GOSTEI 0
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.
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
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
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.
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
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
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?
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
17/04/2013
Opa, no DBEdit 2 você está exibindo o valor do DBEdit3:
Tá errado aí, não?
DBEdit2.Text := FormatFloat('#,##0.00', StrToFloat(DBEdit3.Text));
Tá errado aí, não?
GOSTEI 0
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:
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
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;
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
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.
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
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!?
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
17/04/2013
É que você está usando aquele FloatToStr, substitua pelo FormatFloat, conforme eu sugeri.
GOSTEI 0
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
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
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;
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
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
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
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
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.
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
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.
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
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.
Então, estou marcando este tópico como Concluído.
Um abraço e o que precisar, é só falar.
GOSTEI 0