Delphi 中 Format 函数的用法详解

Delphi 中 Format 函数的用法详解

Format 是 Delphi 中用于格式化字符串的常用函数,功能类似于 C 语言的 printf 或 C# 的 String.Format

基本语法

function Format(const FormatStr: string; const Args: array of const): string;

参数说明

  • FormatStr:格式字符串,包含普通文本和格式说明符
  • Args:可变参数数组,提供要格式化的值

格式说明符语法

格式说明符基本形式:%[index:][-][width][.precision]type

常用格式类型

类型 说明 示例
d 十进制整数 Format('%d', [10]) → '10'
x 十六进制小写 Format('%x', [255]) → 'ff'
X 十六进制大写 Format('%X', [255]) → 'FF'
e 科学计数法 Format('%e', [1234.567]) → '1.234567E+03'
f 浮点数 Format('%f', [1234.567]) → '1234.567'
g 通用格式 Format('%g', [1234.567]) → '1234.567'
n 千位分隔 Format('%n', [1234.567]) → '1,234.567'
m 货币格式 Format('%m', [1234.567]) → '¥1,234.57' (取决于区域设置)
p 指针地址 Format('%p', [@MyVar]) → '0012FEC0'
s 字符串 Format('%s', ['Delphi']) → 'Delphi'

使用示例

基本示例

var
  s: string;
begin
  s := Format('姓名:%s,年龄:%d岁', ['张三', 25]);
  // 结果:'姓名:张三,年龄:25岁'
end;

指定参数索引

s := Format('%0:d %1:d %0:d', [10, 20]); 
// 结果:'10 20 10'

控制宽度和对齐

s := Format('%-10s%10d', ['测试', 123]); 
// 结果:'测试        123'(左对齐和右对齐)

浮点数格式化

s := Format('%.2f', [3.14159]); 
// 结果:'3.14'(保留2位小数)

s := Format('%8.2f', [3.14159]); 
// 结果:'    3.14'(总宽度8,右对齐)

日期时间格式化

s := Format('日期:%s,时间:%s', 
  [DateToStr(Now), TimeToStr(Now)]);

多参数复杂格式

s := Format('产品:%s,单价:%m,库存:%d件,占比:%.1f%%', 
  ['手机', 3999.99, 150, 75.5]);
// 结果:'产品:手机,单价:¥3,999.99,库存:150件,占比:75.5%'

注意事项

  1. 单元引用Format 函数位于 System.SysUtils 单元

  2. 参数匹配:格式说明符数量必须与参数数量匹配

  3. 性能考虑:频繁调用时,考虑使用 TStringBuilder

  4. 本地化:某些格式(如货币、日期)受系统区域设置影响

  5. 错误处理:不匹配的格式可能导致异常

高级用法

自定义日期格式

s := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now);

格式化数组

var
  arr: array[0..2] of Integer;
begin
  arr[0] := 10;
  arr[1] := 20;
  arr[2] := 30;
  s := Format('数组:%d,%d,%d', [arr[0], arr[1], arr[2]]);
end;

Format 是 Delphi 字符串处理中最强大和灵活的函数之一,掌握它可以极大地简化复杂的字符串构建任务。

Delphi 格式说明符详解

格式说明符的基本形式为:%[index:][-][width][.precision]type。下面我将详细解释每个部分的含义:

1. % - 起始符号

  • 每个格式说明符都必须以百分号 % 开头

2. [index:] - 参数索引(可选)

  • 用于指定使用哪个参数(从0开始)
  • 格式:数字后跟冒号(如 0:1:
  • 示例:
    Format('%1:s %0:s', ['World', 'Hello'])  // 结果为 "Hello World"
    

3. [-] - 对齐方式(可选)

  • - 表示左对齐,默认是右对齐
  • 示例:
    Format('%-10s', ['Hi'])  // "Hi        " (左对齐,总宽度10)
    Format('%10s', ['Hi'])   // "        Hi" (右对齐,总宽度10)
    

4. [width] - 最小宽度(可选)

  • 指定输出内容的最小宽度(字符数)
  • 如果实际内容比宽度短,会用空格填充
  • 示例:
    Format('%5d', [42])  // "   42" (总宽度5)
    

5. [.precision] - 精度(可选)

  • 对于浮点数:指定小数位数
  • 对于字符串:指定最大字符数
  • 格式:小数点后跟数字
  • 示例:
    Format('%.2f', [3.14159])  // "3.14" (保留2位小数)
    Format('%.5s', ['Delphi'])  // "Delph" (最多5个字符)
    

6. type - 格式类型(必需)

  • 指定如何格式化参数,必须的最后一个字符
  • 常用类型:
    • d:十进制整数
    • x/X:十六进制(小写/大写)
    • e/E:科学计数法
    • f:固定小数位数
    • g/G:通用格式(自动选择最短表示)
    • n:带千位分隔符的数字
    • m:货币格式
    • p:指针地址
    • s:字符串

综合示例

var
  s: string;
begin
  // 参数索引:1,左对齐,总宽度15,保留3位小数
  s := Format('%1:-15.3f', [3.14159, 123.456789]); 
  // 结果:"123.457      " (使用第二个参数,左对齐,宽度15)
  
  // 参数索引:0,右对齐,总宽度10,十六进制大写
  s := Format('%0:10X', [255]); 
  // 结果:"        FF" (右对齐,宽度10)
  
  // 字符串,最大长度4
  s := Format('%.4s', ['Programming']); 
  // 结果:"Prog"
end;

注意事项

  1. 方括号 [] 表示该部分是可选的,实际使用时不需要写这些括号
  2. 参数索引从0开始
  3. 宽度和精度都可以用*代替,此时从参数中获取值:
    Format('%*.*f', [8, 2, 3.14159])  // "    3.14" (宽度8,精度2)
    
  4. 要显示百分号本身,需要使用 %%
posted @ 2025-05-05 13:52  月如无恨月长圆  阅读(795)  评论(0)    收藏  举报