delphi Format格式化函式

2021-08-02 03:53:11 字數 3277 閱讀 7808

format是乙個很常用,卻又似乎很煩的方法,本人試圖對這個方法的幫助進行一些翻譯,讓它有乙個完整的概貌,以供大家查詢之用:

首先看它的宣告:

function format(const format: string; const args: array of const): string; overload;

事實上format方法有兩個種形式,另外一種是三個引數的,主要區別在於它是執行緒安全的,

但並不多用,所以這裡只對第乙個介紹:

function format(const format: string; const args: array of const): string; overload;

format引數是乙個格式字串,用於格式化args裡面的值的。args又是什麼呢,

它是乙個變體陣列,即它裡面可以有多個引數,而且每個引數可以不同。

如以下例子:

format('my name is %6s',['wind']);

返回後就是my name is wind

現在來看format引數的詳細情況:

format裡面可以寫普通的字串,比如'my name is',但有些格式指令字元具有特殊意義,比如"%6s"格式指令具有以下的形式:

"%" [index ":"] ["-"] [width] ["." prec] type

它是以"%"開始,而以type結束,type表示乙個具體的型別。中間是用來

格式化type型別的指令字元,是可選的。

先來看看type,type可以是以下字元:

d 十制數,表示乙個整型值

u 和d一樣是整型值,但它是無符號的,而如果它對應的值是負的,則返回時是乙個2的32次方減去這個絕對值的數,如:

format('this is %u',[-2]);

返回的是:this is 4294967294

f 對應浮點數

e 科學表示法,對應整型數和浮點數,比如

format('this is %e',[-2.22]);

返回的是:this is -2.22000000000000e+000,等一下再說明如果將數的精度縮小

g 這個只能對應浮點型,且它會將值中多餘的數去掉,比如

format('this is %g',[02.200]);

返回的是:this is 2.2

n 只能對應浮點型,將值轉化為號碼的形式。看乙個例子就明白了

format('this is %n',[4552.2176]);

返回的是this is 4,552.22

注意有兩點,一是只表示到小數後兩位,等一下說怎麼消除這種情況, 二是,即使小數沒有被截斷,它也不會也像整數部分一樣有逗號來分開的

m錢幣型別,但關於貨幣型別有更好的格式化方法,這裡只是簡單的格式化,另外它只對應於浮點值

format('this is %m',[9552.21]);

返回:this is ¥9,552.21

p 對應於指標型別,返回的值是指標的位址,以十六進製制的形式來表示

例如:var x:integer;

p:^integer;

begin

x:=99;

p:=@x;

edit1.text:=format('this is %p',[p]);

end;

edit1的內容是:this is 0012f548

s 對應字串型別,不用多說了吧

x 必須是乙個整形值,以十六進製制的形式返回

edit1.text:=format('this is %x',[15]);

返回是:this is f

型別講述完畢,下面介紹格式化type的指令:

[index ":"]這個要怎麼表達呢,看乙個例子

format('this is %d %d',[12,13]);

其中第乙個%d的索引是0,第二個%d是1,所以字元顯示的時候是這樣 this is 12 13

而如果你這樣定義:

format('this is %1:d %0:d',[12,13]);

那麼返回的字串就變成了this is 13 12。現在明白了嗎,[index ":"] 中的index指示args中引數顯示的順序還有一種情況,如果這樣

format('%d %d %d %0:d %d', [1, 2, 3, 4])

將返回1 2 3 1 2。

如果你想返回的是1 2 3 1 4,必須這樣定:

format('%d %d %d %0:d %3:d', [1, 2, 3, 4])

但用的時候要注意,索引不能超出args中的個數,不然會引起異常如

format('this is %2:d %0:d',[12,13]);

由於args中只有12 13 兩個數,所以index只能是0或1,這裡為2就錯了[width] 指定將被格式化的值佔的寬度,看乙個例子就明白了

format('this is %4d',[12]);

輸出是:this is   12,這個是比較容易,不過如果width的值小於引數的長度,則沒有效果。

如:format('this is %1d',[12]);

輸出是:this is 12

["-"]這個指定引數向左齊,和[width]合在一起最可以看到效果:

format('this is %-4d,yes',[12]);

輸出是:this is 12   ,yes

["." prec] 指定精度,對於浮點數效果最佳:

format('this is %.2f',['1.1234]);

輸出 this is 1.12

format('this is %.7f',['1.1234]);

輸出了 this is 1.1234000

而對於整型數,如果prec比如整型的位數小,則沒有效果反之比整形值的位數大,則會在整型值的前面以0補之

format('this is %.7d',[1234]);

輸出是:this is 0001234]

對於字元型,剛好和整型值相反,如果prec比字串型的長度大則沒有效果,反之比字串型的長度小,則會截斷尾部的字元

format('this is %.2s',['1234']);

輸出是 this is 12,而上面說的這個例子:

format('this is %e',[-2.22]);

返回的是:this is -2.22000000000000e+000,怎麼去掉多餘的0呢,這個就行啦

format('this is %.2e',[-2.22]);

好了,第乙個總算講完了,應該對他的應用很熟悉了吧

delphi Format格式化函式

format是乙個很常用,卻又似乎很煩的方法,本人試圖對這個方法的幫助進行一些翻譯,讓它有乙個完整的概貌,以供大家查詢之用 首先看它的宣告 function format const format string const args array of const string overload 事實...

Delphi Format 格式化數字

function format const format string const args array of const string format字串說明 index width prec type 1 格式化字串必須以 開頭 2 index 索引指的是args引數列表中要顯示的每一項的序號。比...

格式化,強調 數值格式化

聚合函式返回的的數值型別的值有個特點就是沒有被格式化。通過前面的帶 sum 聚合函式的示例,我們可以看到這一點 注意合計值 命令,或者在物件檢視器中選中 displayformat 屬性。在上節的示例中,格式化操作是針對一物件或物件內的表示式,在物件內僅有乙個表示式時它還能正常工作,不過當物件內不有...