Fórum formatar casas decimais em um campo memo com varias linhas #257447

07/11/2004

0

Como formatar casas decimais em um campo Memo com varias linhas, conforme o exemplo abaixo:
assim
1000
5000
4500
3500

ficar assim
1,000.00
5,000.00
4,500.00
3,500.00

Tem como fazer :?: Note que a formatação segue o padrão do dolar :?:
Sds...


Zotti

Zotti

Responder

Posts

07/11/2004

Keitarosan

Bom, pode ser feito assim:

var
cont: Integer;
begin
DecimalSeparator := ´.´;
ThousandSeparator := ´,´;

for cont := 0 to Memo1.Lines.Count -1 do
Memo1.Lines[cont] := FloatToStrF(StrToFloat(Memo1.Lines[cont]), ffNumber, 18, 2);
end;

e pronto... funfou aqui no Delphi 5 :D


Responder

Gostei + 0

07/11/2004

Keitarosan

Esqueci de falar, eu acho bom você voltar as variaveis DecimalSeparator e a ThousandSeparator ao seu valor inicial, pra evitar problemas na sua aplicação :wink:


Responder

Gostei + 0

07/11/2004

Gurc

Caro colega,
Acho que a maneira mais correta para fazer isso está no código a seguir. Não se esqueça de colocar um Button1 e um Memo1 em um Form1.

procedure TForm1.Button1Click(Sender: TObject);
var
  AFormatSettings: TFormatSettings;
  ANumero: Real;
  i: Integer;
begin
  GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, AFormatSettings);
  AFormatSettings.ThousandSeparator := ´,´;
  AFormatSettings.DecimalSeparator := ´.´;

  for i:= 0 to Memo1.Lines.Count - 1 do
  begin
    ANumero := StrToFloat(Memo1.Lines[i], AFormatSettings);
    Memo1.Lines[i] := FormatFloat(´,0.00´, ANumero, AFormatSettings);
  end;
end;


Nosso único problema seria chamar esse método mais uma vez, pois o método StrToFloat não suportaria os TousandSeparators, apenas os DecimalSeparators. Teriamos que tirar na mão através de um StringReplace (SysUtils) as vírgulas e usar o StrToFloat com o mesmo AFormatSettings. Acho que esse não é o seu caso, entretanto, coloco-me a disposição para eventuais dúvidas.

Até mais...
Gustavo Royer Chaurais


Responder

Gostei + 0

07/11/2004

Gurc

Caro colega,
Acho que a maneira mais correta para fazer isso está no código a seguir. Não se esqueça de colocar um Button1 e um Memo1 em um Form1.

procedure TForm1.Button1Click(Sender: TObject);
var
  AFormatSettings: TFormatSettings;
  ANumero: Real;
  i: Integer;
begin
  GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, AFormatSettings);
  AFormatSettings.ThousandSeparator := ´,´;
  AFormatSettings.DecimalSeparator := ´.´;

  for i:= 0 to Memo1.Lines.Count - 1 do
  begin
    ANumero := StrToFloat(Memo1.Lines[i], AFormatSettings);
    Memo1.Lines[i] := FormatFloat(´,0.00´, ANumero, AFormatSettings);
  end;
end;


Nosso único problema seria chamar esse método mais uma vez, pois o método StrToFloat não suportaria os TousandSeparators, apenas os DecimalSeparators. Teriamos que tirar na mão através de um StringReplace (SysUtils) as vírgulas e usar o StrToFloat com o mesmo AFormatSettings. Acho que esse não é o seu caso, entretanto, coloco-me a disposição para eventuais dúvidas.

Até mais...
Gustavo Royer Chaurais


Responder

Gostei + 0

07/11/2004

Gurc

Caro colega,
Acho que a maneira mais correta para fazer isso está no código a seguir. Não se esqueça de colocar um Button1 e um Memo1 em um Form1.

procedure TForm1.Button1Click(Sender: TObject);
var
  AFormatSettings: TFormatSettings;
  ANumero: Real;
  i: Integer;
begin
  GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, AFormatSettings);
  AFormatSettings.ThousandSeparator := ´,´;
  AFormatSettings.DecimalSeparator := ´.´;

  for i:= 0 to Memo1.Lines.Count - 1 do
  begin
    ANumero := StrToFloat(Memo1.Lines[i], AFormatSettings);
    Memo1.Lines[i] := FormatFloat(´,0.00´, ANumero, AFormatSettings);
  end;
end;


Nosso único problema seria chamar esse método mais uma vez, pois o método StrToFloat não suportaria os TousandSeparators, apenas os DecimalSeparators. Teriamos que tirar na mão através de um StringReplace (SysUtils) as vírgulas e usar o StrToFloat com o mesmo AFormatSettings. Acho que esse não é o seu caso, entretanto, coloco-me a disposição para eventuais dúvidas.

Até mais...
Gustavo Royer Chaurais


Responder

Gostei + 0

07/11/2004

Gurc

Caro colega,
Acho que a maneira mais correta para fazer isso está no código a seguir. Não se esqueça de colocar um Button1 e um Memo1 em um Form1.

procedure TForm1.Button1Click(Sender: TObject);
var
  AFormatSettings: TFormatSettings;
  ANumero: Real;
  i: Integer;
begin
  GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, AFormatSettings);
  AFormatSettings.ThousandSeparator := ´,´;
  AFormatSettings.DecimalSeparator := ´.´;

  for i:= 0 to Memo1.Lines.Count - 1 do
  begin
    ANumero := StrToFloat(Memo1.Lines[i], AFormatSettings);
    Memo1.Lines[i] := FormatFloat(´,0.00´, ANumero, AFormatSettings);
  end;
end;


Nosso único problema seria chamar esse método mais uma vez, pois o método StrToFloat não suportaria os TousandSeparators, apenas os DecimalSeparators. Teriamos que tirar na mão através de um StringReplace (SysUtils) as vírgulas e usar o StrToFloat com o mesmo AFormatSettings. Acho que esse não é o seu caso, entretanto, coloco-me a disposição para eventuais dúvidas.

Até mais...
Gustavo Royer Chaurais


Responder

Gostei + 0

07/11/2004

Gurc

Desculpem-me enviar 3 vezes a mensagem. Uma tela de página não encontrada estava sendo exibida.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar