Conversão de números para string

Se você não quiser imprimir diretamente e sim concatenar uma quantidade qualquer de variáveis em uma string completa, o Pascal disponibiliza três formas principais de implementação:

Concatenação com funções de conversão dedicadas

***ToStr + concatenação de strings com o operador +

Converta cada tipo de dado individualmente usando funções de conversão específicas e depois una as strings com o operador +:

uses SysUtils;

var
  MyInt: Integer;
  MyStr: string;
begin
  MyInt := 123;
  MyStr := 'My int number is ' + IntToStr(MyInt) + ', and the value of Pi is ' + FloatToStr(Pi);
end;Code language: JavaScript (javascript)

Funções auxiliares comuns (todas presentes na unidade SysUtils):

  • Número para string: IntToStr, FloatToStr, FormatFloat (formato de ponto flutuante personalizado)
  • String de volta para valor numérico: StrToInt, StrToIntDef, StrToFloat

Exemplo totalmente executável

{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}

uses SysUtils;

var
  MyInt: Integer;
  MyStr: string;
begin
  MyInt := 180;
  MyStr := 'My int number is ' + IntToStr(MyInt) + ', and the value of Pi is ' + FloatToStr(Pi);
  WriteLn(MyStr);
end.Code language: PHP (php)
Vantagens
  1. Extremamente flexível; funções segmentadas cobrem a maioria dos tipos: inteiros, pontos flutuantes, datas e outros;
  2. Possui um conjunto completo de funções de conversão inversa, facilitando a análise de strings digitadas pelo usuário.
Desvantagens

Quando existem muitas variáveis, a concatenação com vários operadores + deixa o código extenso e de difícil leitura.


Função de formatação Format

Format (similar ao sprintf da linguagem C)

Sintaxe básica

uses SysUtils;

var
  Res: string;
  MyInt: Integer;
  MyFloat: Double;
  MyString: string;
begin
  Res := Format('%d %.4f %s', [MyInt, MyFloat, MyString]);
end;Code language: JavaScript (javascript)
  • %d: marcador de posição para inteiro; %.4f: número de ponto flutuante com quatro casas decimais; %s: marcador de posição para string
  • O segundo parâmetro é um array constante que preenche os marcadores de posição em sequência

Exemplo completo

{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}

uses SysUtils;

var
  Res: string;
  MyInt: Integer;
  MyFloat: Double;
  MyString: string;
begin

  // set value
  MyInt := 169;
  MyFloat := 0.618;
  MyString := 'foxdevelop.com';

  Res := Format('%d %.4f %s', [MyInt, MyFloat, MyString]);
  WriteLn(Res);
end.Code language: PHP (php)

Vantagens

  1. O template de formatação é separado dos dados, mantendo a estrutura organizada; para tradução multilíngue de software basta alterar a string do template sem modificar a lista de variáveis;
  2. Não há lógica oculta do compilador. Ao declarar funções personalizadas com parâmetros variáveis array of const você reutiliza essa lógica de formatação e encaminha os parâmetros para o processamento nativo da função Format.

Desvantagens

O compilador não verifica em tempo de compilação se os marcadores correspondem aos tipos das variáveis; tipos incompatíveis geram uma exceção de conversão EConvertError em tempo de execução (não causa falhas de acesso à memória).


WriteStr

Armazena a saída do Write em uma variável string

Finalidade: funciona quase igual a Write/WriteLn, mas ao invés de imprimir no console, salva o resultado na primeira variável string alvo:

var S: string;
begin
  WriteStr(S, 'Pi value: ', Pi:1:4);
end;Code language: JavaScript (javascript)

Exemplo completo

{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}

uses SysUtils;

var S: string;
begin
  WriteStr(S, 'Pi value: ', Pi:1:4);
  WriteLn(S);
end.Code language: PHP (php)

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *