首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 格式化輸出函數詳解(一):Format 通用格式化完全指南

     編輯:Delphi

前言

Format 是 Delphi 最通用的格式化函數,支援整數、浮點數、字串、指標、十六進制等多種類型,格式字串語法豐富,包含索引、寬度、對齊、精度、類型等完整控制。本文通過 25+ 實例系統講解。

函數原型

function Format(const Format: string; const Args: array of const): string;
  • Format:格式字串,含佔位符 %...。
  • Args:array of const(即 array of TVarRec),支援任意類型參數。

格式指令完整語法

% [index ":"] ["-"] [width] [".prec"] type
組成說明
%佔位符起始,固定
index:可選,指定參數索引 (0-based),允許重複/亂序使用
-可選,左對齊 (預設右對齊)
width可選,最小寬度,不足補空格
.prec可選,精度:浮點數小數位、字串最大長度、整數最小位數
type必選,類型指令 (d/u/f/g/n/m/e/p/x/s 等)

類型指令速查

指令對應類型示例輸出
d有符號整數2147483647
u無符號整數4294967295
s字串Hello
f浮點數 (固定 2 位小數)3.14
g浮點數 (去尾隨 0)1.2345
n浮點數 (千分位 + 2 位小數)12,345.68
m貨幣 (含符號, 千分位, 2 位小數)¥12,345.68
e科學計數法1.23456789000000E+004
p指標地址 (16 進制)0012F5BC
x16 進制整數FF

實例演示(節選)

var s: string;
begin
  {基本類型}
  s := Format('MaxInt=%d, MinInt=%d', [MaxInt, Low(Integer)]);
  s := Format('UIntMax=%u', [High(Cardinal)]);
  s := Format('Negative to UInt: %u', [-2]); {4294967294}
  s := Format('%s! %s', ['你好', '我是萬一']); {你好! 我是萬一}

  {浮點數變體}
  s := Format('%f', [Pi]);        {3.14}
  s := Format('%g', [01.2345000]); {1.2345}
  s := Format('%n', [12345.6789]); {12,345.68}
  s := Format('%m', [12345.6789]); {¥12,345.68}
  s := Format('%e', [12345.6789]); {1.23456789000000E+004}

  {索引與重複使用}
  s := Format('%1:s%0:s%0:s%1:s', ['萬', '一']); {一萬萬一}

  {寬度與對齊}
  s := Format('%d,%8d,%d', [1,2,3]);   {1,       2,3}
  s := Format('%d,%-8d,%d', [1,2,3]);  {1,2       ,3}

  {精度控制}
  s := Format('%.9f', [Pi]);       {3.141592654}
  s := Format('%.5d', [12]);       {00012}
  s := Format('%.3s', ['Format']); {For}
  s := Format('%.3e', [123.456]);  {1.23E+002}
end;

進階技巧

1. 參數索引實現參數重排/重用

Format('%2:s %1:s %0:s', ['A','B','C']);  {C B A}
Format('%0:s %0:s', ['Hi']);              {Hi Hi}

2. 貨幣格式受系統區域影響

%m 使用 FormatSettings.CurrencyString、CurrencyFormat、ThousandSeparator、DecimalSeparator。多語言環境建議顯式設置 FormatSettings。

3. 指標格式 %p 僅供調試

地址隨編譯/運行變化,不可持久化。

4. 避免 %u 處理負數陷阱

負數轉無符號會產生巨大正數(MaxUInt - Abs(Value) + 1),業務邏輯中慎用。

常見陷阱

  • 參數類型不匹配:傳入 Int64 但用 %d 會截斷,需用 %d 配合 Int64 實際上 RTL 會自動處理,但 %x 只取低 32 位。
  • 精度 0 視同 1:%.0f 等同 %.1f。
  • 字串精度截斷:%.3s 截取前 3 字符,超長不補齊。

總結

Format 以類 printf 的語法提供了極致靈活的綜合格式化能力,掌握「索引→對齊→寬度→精度→類型」五段式語法,即可應對從簡單字串拼接到複雜報表生成的所有場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved