Ir para conteúdo
Fórum Script Brasil
  • 0

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


wagnercampanari

Pergunta

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 para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...