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"