在 Windows Form 中使用 String Format 來產生格式化字串

C++ 中要格式化char字串有sprintf,要格式化wchar_t字串有swprintf,而在 Windows Form 裡則可以使用String類別下的Format方法,不過由於其字母的意義跟sprintf中大不相同,且雖然在網路上可以找到許多範例,不過都是以 C# 語法書寫,因此這邊記錄下 C++/CLI 寫法(其實都差不多啦哈哈)。

基本用法

若有一個浮點數pi其值為3.14159,則我們可以如下表示:

double pi = 3.14159;
String^ str = String::Format("PI = {0}", pi);
// str = "PI = 3.14159" 

變數的位置用大括號包起來,0 表示後面緊接著的第一個變數、若為 1 則表示第二個,以此類推。因此變數的順序是可以任意調整的,也沒有一對一的限制,可以重複使用,例如:

double pi = 3.14159;
double r = 1;
String^ str = String::Format("Circle Area {2,5:F2} = {0}*{1}*{1}", pi, r, pi*r*r);
// str = "Circle Area  3.14 = 3.14159*1*1" 

爲了使得輸出字串更美觀,上面的範例中使用了格式控制,其格式如下:

{2,5:F2}
  , 逗號後指的是此變數最少占用的字符格子數量
   (正數:靠右對齊、負數:靠左對齊)。
  : 冒號後指的是此變數的格式及有效位數,其意義後面會說明。

這兩個選項可寫可不寫,如果不指定格式的話,程式會為每個變數試著套用ToString方法來輸出,如果沒有會報錯。

格式控制

採用:Axx的形式,其中 A 可以用字母有C、D、E、F、G、N、P、X;xx 代表有效位數,可以設定0~99,其字母分別的意義如下:

C 貨幣

顯示含有逗點且包含貨幣符號的數值,xx指定小數位數,可以透過設定CultureInfo來改變顯示的貨幣符號。

D 整數

只能用在整數類型,xx指定整數位數,例如指定:D4會往前補0到4位數。

E 指數

以 6.626E-34 的形式表示浮點數,xx指定小數位數,若指定為:E2則顯示 6.62E-34。

F 浮點數

以 9.80665 的形式表示浮點數,xx指定小數位數,若指定為:F3則顯示 9.806。

G 一般

取 E 或 F 較短的一個,xx指定顯示總位數(整數+小數),普朗克常數顯示 6.626E-34,重力加速度顯示 9.80665。

N 有逗點的數字

例如顯示為 101,325,xx指定小數位數。

P 百分比(%)

0.001 的數值會自動顯示為 0.1%,xx指定小數位數。

X 十六進位

48815 會顯示 BEAF,使用小寫:x則會顯示小寫的 beaf。xx指定整數位數,位數不夠會往前補0補齊。

自訂格式

如果不使用預設的字母來顯示數值,則可以使用0#.%等字元來自定格式,完整版請參閱微軟官網 。例如:

double pi = 3.14159;
String^ str = String::Format("PI = {0:#.00}", pi); // str = "PI = 3.14" 

前面寫0的話,位數不夠時會做補齊。

double pi = 3.14159;
String^ str = String::Format("PI = {0:000.00}", pi); // str = "PI = 003.14" 

References

  1. String.Format Method (System) | Microsoft Docs