Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Corrigir pontos e virgula de números.


Question

Alguém teria uma solução melhor ou poderia me ajudar a acabar esse código que estou tendo problema em modificar algumas das possibilidades sem que interfira nas outras possibilidades:

Preciso que valores do edit1 sejam corrigidos para o edit2, serão valores numéricos.

caso o valor seja:   45,12 ou 45.12 o sistema mantem o ponto ou a virgula dependendo como foi digitado.

se os valores forem maiores exemplo:  1,125,12 ou 1.125.12 o sistema limpe as milhares '.' ou ',' e mantenha somente os centavos. 1125,12 ou 1125.12 dependendo de como foi digitado.

as possibilidades do usuário digitar são:

x , xxx, xx

x . xxx . xx

x, xxx . xx

x . xxx , xx 

xx , xx

xx . xx

ou valores maiores na casa de milhões, mas se conseguir na casa dos 100.000,00 já esta bom.

meu Código:

var
  Form1: TForm1;
  count,count2,r:integer;

implementation

{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
VLR:string;
i:integer;
begin
vlr:=Edit1.Text;

for i:=1 to Length(vlr) do
if vlr[i]=',' then Count:=Count+1;
Label1.Caption:=IntToStr(Count);

if count >= 2 then begin

for i:=1 to Length(vlr) do
if vlr[i]=',' then break;   ///Delete(vlr,i,1);

Delete(vlr,i,1);

Edit2.Text := vlr;

//Count:=0;
end;


for i:=1 to Length(vlr) do
if vlr[i]='.' then Count2:=Count2+1;
Label1.Caption:=IntToStr(Count2);

if (count = 1) and (count2 = 1) then begin

for i:=1 to Length(vlr) do
if vlr[i]='.' then break;   ///Delete(vlr,i,1);

Delete(vlr,i,1);

Edit2.Text := vlr;
end;

count:=0;
Count2:=0;

for i:=1 to Length(vlr) do
if vlr[i]=',' then Count:=Count+1;
Label1.Caption:=IntToStr(Count);

for i:=1 to Length(vlr) do
if vlr[i]='.' then Count2:=Count2+1;
Label1.Caption:=IntToStr(Count2);

if (count = 1) or (count2 = 1) then begin
Edit2.Text := vlr;
count:=0;
Count2:=0;

end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
Count:=0;
count2:=0;
r:=0;
end;

 

Não esta completo, quando eu tento para corrigir x,xxx.xx acaba interferindo em alguma outra correção.

 

 

 

 

 

 

Link to post
Share on other sites

5 answers to this question

Recommended Posts

  • 0

Voce pode simplificar seu código por esse:

procedure TForm1.Edit1Exit(Sender: TObject);
begin
   if pos('.',Edit1.Text) > 0 then
      Edit1.Text := StringReplace(Edit1.Text, '.', ',', []);

      Edit1.Text := CurrToStrF(StrToCurr(Trim(Edit1.Text)),ffNumber,2);
end;

Exemplo:

Se voce digitar :   12345678.90  resultado   12.345.678,90

se digitar :  123456,79   resultado  123.456,79

Só tem que digitar o numero e na parte dos centavos, voce pode usar ponto ou virgula e depois dar um <Enter> ou <Tab> para mudar de campo.

Na saida do campo o valor é automaticamente formatado.

Mas se voce quer fazer o inverso, basta limpar todas as ocorrencias de pontos e virgulas na string e depois formatar com casas decimais.

Obs: Veja comando Format no help do delphi  ( Tecla  F1 )

abraço

Link to post
Share on other sites
  • 0

Quase pronto...

 

procedure TForm1.Button1Click(Sender: TObject);
var
str:string;
i,resp:integer;

begin
str:=Edit1.Text;


for i:=1 to Length(str) do
if str[i]=',' then Count:=Count+1;  

resp:= Length(str) - (count)-3; ///-3 que são os três ultimos caracteres aonde esta a ultima virgula

for i:=1 to resp do
if str[i]=',' then Delete(str,i,1);;


edit2.Text:=str;

count:=0;


end;

 

Link to post
Share on other sites
  • 0

Se voce digitar :  12.345.678,90   resultado  12345678.90

Ok... mas isso é ainda mais simples

procedure TForm1.Button1Click(Sender: TObject);
var s : string;
begin
   Edit1.text := StringReplace(Edit1.Text, '.', '', [rfReplaceAll]);
   Edit1.text := StringReplace(Edit1.Text, ',', '', [rfReplaceAll]);
   s := trim(Edit1.text);
   Insert(',',s, Length(s)-1);
   Edit1.text := s;
end;

Obs: voce tambem pode digitar somente os numeros, sem ponto ou virgula que vai ficar como está querendo

abraço

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148691
    • Total Posts
      644530
×
×
  • Create New...