quinta-feira, 17 de setembro de 2015

Como converter uma string em um valor numérico inteiro


Em algumas situações precisamos converter strings em valores numéricos do tipo inteiro. Isso acontece quando recebemos valores de caixas de texto e precisamos usuá-los em cálculos.

Vamos começar com a função StrToInt() da unit SysUtils. Esta função recebe uma string representando um valor inteiro válido e retorna um valor inteiro. Veja o exemplo:

procedure TForm1.Button1Click(Sender: TObject);
var
  valor1, valor2, soma: Integer;
begin
  // vamos receber as strings dos TEdits e converter
  // seus valores para inteiros
  valor1 := StrToInt(Edit1.Text);
  valor2 := StrToInt(Edit2.Text);

  // vamos obter a soma dos dois valores
  soma := valor1 + valor2;

  // vamos exibir o resultado. Note o uso de IntToStr() para
  // converter o valor inteiro em string
  ShowMessage('A soma é: ' + IntToStr(soma));
end;

Note que, se a string sendo convertida possuir um valor inteiro inválido, uma exceção do tipo EConvertError será lançada. Podemos evitar isso usando a função TryStrToInt(). Esta função recebe dois argumentos: a string a ser convertida e a variável do tipo Integer que receberá o valor. O resultado será true se a conversão for feita com sucesso e false em caso contrário. Veja:

procedure TForm1.Button1Click(Sender: TObject);
var
  valor: Integer;
begin
  // vamos tentar converter o valor da caixa de texto
  // em um inteiro
  if TryStrToInt(Edit1.Text, valor) then
    ShowMessage('Conversão efetuada com sucesso.')
  else
    ShowMessage('Erro na conversão');
end;

Há ainda uma terceira possibilidade: usar a função StrToIntDef(). Esta função funciona exatamente da mesma forma que StrToInt(), exceto que agora, se houver um erro de conversão, um valor inteiro padrão será retornado. Veja:

procedure TForm1.Button1Click(Sender: TObject);
var
  valor: Integer;
begin
  // vamos converter o valor da caixa de texto
  // em um inteiro. Se a conversão não puder ser feita
  // o valor 10 será atribuído à varial valor
  valor := StrToIntDef(Edit1.Text, 10);

  // vamos exibir o resultado
  ShowMessage(IntToStr(valor));
end;

Caso você precise trabalhar com inteiros de 64 bits, poderá usar as funções StrToInt64(), StrToInt64Def() e TryStrToInt64().

Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009.

Nenhum comentário:

Postar um comentário