数值转字符串

如果不想直接打印,而是把任意多个变量拼接成完整字符串,Pascal 提供三种主流实现方式:

专用转换函数拼接

***ToStr + 字符串 + 拼接

专用转换函数单独转换单一类型,再用 + 拼接字符串:

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)

常用配套函数(均在 SysUtils 单元):

  • 数字转字符串:IntToStrFloatToStrFormatFloat(自定义浮点格式)
  • 字符串转回数值:StrToIntStrToIntDefStrToFloat

完整可运行例子

{$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)
优点
  1. 极度灵活,细分函数覆盖整数、浮点数、日期等绝大多数类型;
  2. 反向转换配套完善,解析用户输入字符串时很方便。
缺点

变量一多,多层 + 拼接代码冗长、可读性差。


格式化函数

Format(类似 C语言的 sprintf)

基础语法

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:整数占位符;%.4f:浮点数,保留4位小数;%s:字符串占位符
  • 第二个参数是常量数组,依次填充占位符

完整例子

{$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)

优点

  1. 格式模板与数据分离,结构清爽;做软件多语言翻译时,只需修改模板字符串,不用改动变量列表;
  2. 无编译器黑魔法。自定义函数声明 array of const 可变参数,就能复用这套格式化逻辑,还能把参数转发给 Format 自行处理。

缺点

编译期不校验占位符和变量类型是否匹配;类型不匹配会在运行时抛出 EConvertError 转换异常(不会造成内存访问崩溃)。


WriteStr

将 Write 输出存入字符串变量

作用:行为和 Write/WriteLn 几乎一致,但不打印控制台,而是把结果存入第一个目标字符串变量:

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

完整例子

{$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)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注