數字格式化字串總覽

上一節我們學習了字串佔位符,並認識兩種寫法。事實上除了這兩種方式以外,C# 還支援更進階、規則更複雜的格式化語法。

基礎格式佔位符語法

{索引,對齊方式:格式規格}
1、index(索引)

索引 / 內插變數,必填參數

傳統數字佔位符寫法:Console.WriteLine(“{0}”, 123); 代表在 {0} 的位置填入數值 123

字串內插 $"":可直接寫變數名稱,不需要數字索引,範例 Console.WriteLine($”Tom is {age} years old”)

範例程式

int money = 1000;
Console.WriteLine("原始數值:{0}", money);
Console.WriteLine("貨幣格式:{0:C}", money);
Console.WriteLine("靠右對齊10字元寬度貨幣:|{0,10:C}|", money);Code language: JavaScript (javascript)
原始數值:1000
貨幣格式:$1,000.00
靠右對齊10字元寬度貨幣:| $1,000.00|

內插語法對應寫法

int money = 500;
Console.WriteLine($"原始數值:{money}");
Console.WriteLine($"貨幣格式:{money:C}");
Console.WriteLine($"靠右對齊10字元寬度貨幣:|{money,10:C}|");Code language: JavaScript (javascript)
2、alignment(對齊設定)

對齊描述符,選填,以逗號 , 隔開

用途:控制輸出的最小字元寬度以及左右對齊模式

舉例:Console.WriteLine(“{0,10}”, 123); // 佔滿10個字元空間,數字靠右排列

可以看見 123 左側有大量空白,這裡的 10 代表總共配置10個字元位置,也就是 123 左邊會補上7個空白字元,達成靠右對齊效果。

正數:靠右對齊,寬度不足時左側補空白 範例:{0,10} → 佔10字元寬,數字靠右

負數:靠左對齊,寬度不足時右側補空白 範例:{0,-10} → 佔10字元寬,數字靠左

我們修改程式如下

Console.WriteLine("{0,-10}", 123);  // 占用10個字元,負數代表數字靠左對齊Code language: JavaScript (javascript)

單純數字不易分辨空白,我們加上豎線區隔空白方便觀察

Console.WriteLine("|{0,-10}|", 123);
Console.WriteLine("|{0,10}|", 456);Code language: JavaScript (javascript)

加上前後豎線後就能一目了然:數字10代表固定10字元寬度,負數靠左、正數靠右,不足的位置自動補空白。

改用字串內插語法的對應寫法如下

int one = 123;
int two = 456;
Console.WriteLine($"|{one,-10}|");
Console.WriteLine($"|{two,-10}|");Code language: JavaScript (javascript)
3、format(格式標記)

格式欄位,選填,使用冒號 : 與前半部隔開

用來控制數字顯示樣式:貨幣、小數點、科學記號、十六進位等等

格式欄位結構 :Axx

  • : 必須緊貼佔位符,中間不能有空白
  • A:單字母格式符(共9種內建標準格式,部分區分大小寫)
  • xx:精準度參數(選填,1~2位數字,作用隨格式符改變)
// F4:定點小數格式,保留四位小數
Console.WriteLine("{0:F4}", 12.345678);

// 內插語法對應寫法
Console.WriteLine($"{12.345678:F4}");Code language: JavaScript (javascript)

再多看幾個示範

double myDouble = 12.345678;
Console.WriteLine("{0,-10:G} -- 通用格式", myDouble);      // 12.345678 -- 通用格式
Console.WriteLine("{0,-10} -- 預設格式", myDouble);         // 12.345678 -- 預設格式
Console.WriteLine("{0,-10:F4} -- 定點小數", myDouble);   // 12.3457  -- 定點小數
Console.WriteLine("{0,-10:C} -- 貨幣格式", myDouble);     // $12.35    -- 貨幣格式
Console.WriteLine("{0,-10:E3} -- 科學記號", myDouble);//1.235E+001 -- 科學記號
Console.WriteLine("{0,-10:x} -- 十六進位整數", 1194719);   // 123adf    -- 十六進位整數Code language: JavaScript (javascript)

9 種標準數字格式符對照表

標記名稱功能精準度含義範例輸出
C/cCurrency 貨幣自動加上在地貨幣符號小數位數{0:C} 12.5 → $12.50
D/dDecimal 十進位整數僅適用整數,不足位數補前導零最少顯示位數{0:D4} 12 → 0012
F/fFixed-point 定點小數固定小數位數保留的小數位數{0:F4} 12.345678 →12.3457
G/gGeneral 通用格式自動切換定點/科學記號,系統預設格式有效位數{0:G4} 12.345678 →12.35
X/xHexadecimal 十六進位(區分大小寫)輸出十六進位,X大寫、x小寫最少顯示位數{0:x} 180026 → 2bf3a
N/nNumber 千分位數字數字每三位加分隔符小數位數{0:N2} 12345678.54321 →12,345,678.54
P/pPercent 百分比數值乘以100並加上%符號小數位數{0:P2} 0.1221897 →12.22 %
R/rRound-trip 往返格式格式化後可完整還原原始數值不丟失精度忽略精準度參數{0:R} 1234.21897 →1234.21897
E/eScientific 科學記號(區分大小寫)科學計數法,E大寫/e小寫尾數保留小數位{0:e4}12.3456789 →1.2346e+001

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *