如果不想直接打印,而是把任意多个变量拼接成完整字符串,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 单元):
- 数字转字符串:
IntToStr、FloatToStr、FormatFloat(自定义浮点格式) - 字符串转回数值:
StrToInt、StrToIntDef、StrToFloat
完整可运行例子
{$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)

优点
- 极度灵活,细分函数覆盖整数、浮点数、日期等绝大多数类型;
- 反向转换配套完善,解析用户输入字符串时很方便。
缺点
变量一多,多层 + 拼接代码冗长、可读性差。
格式化函数
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)

优点
- 格式模板与数据分离,结构清爽;做软件多语言翻译时,只需修改模板字符串,不用改动变量列表;
- 无编译器黑魔法。自定义函数声明
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)
