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.
Pergunta
wagnercampanari
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
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.