在 C# 開發中,將數值、日期或物件轉換為特定格式的字串是極為常見的需求。無論是顯示貨幣、百分比、科學記號,還是自訂位數補零、千分位分隔,掌握 string.Format、ToString 以及插值字串($"")的格式指定字串,能大幅提升程式碼可讀性與維護性。本文整理了最完整的標準格式與自訂格式對照表,並附上實際輸出範例,方便隨時查閱。
標準格式採用 {格式指定字元}[精度] 形式,例如 C2、N0、E3。下表列出常用格式與輸出範例(以 int a = 12345678、double b = 1234.12543 為例):
| 格式 | 說明 | int 輸出 | double 輸出 |
|---|---|---|---|
C / c | 貨幣(依目前文化特性) | ¥12,345,678.00 | ¥1,234.13 |
C3 | 貨幣,3 位小數 | ¥12,345,678.000 | ¥1,234.125 |
D / d | 十進位(僅整數型別) | 12345678 | ❌ 錯誤 |
E / e | 科學記號 | 1.234568E+007 | 1.234125E+003 |
F / f | 定點數(預設 2 位小數) | 12345678.00 | 1234.13 |
N / n | 數值(含千分位,預設 2 位小數) | 12,345,678.00 | 1,234.13 |
X / x | 十六進位(僅整數型別) | BC614E | ❌ 錯誤 |
G / g | 通用(最精簡表示) | 12345678 | 1234.12543 |
R / r | 往返(確保精度不遺失,僅浮點數) | ❌ 錯誤 | 1234.12543 |
P / p | 百分比(乘 100 加 %) | 1,234,567,800.00% | 123,412.54% |
int a = 12345678;
double b = 1234.12543;
// string.Format 用法
string s1 = string.Format("{0:C}", a); // ¥12,345,678.00
string s2 = string.Format("{0:N2}", b); // 1,234.13
// ToString 用法
string s3 = a.ToString("C"); // ¥12,345,678.00
string s4 = b.ToString("F3"); // 1234.125
// C# 6+ 插值字串(推薦)
string s5 = $"{a:C}"; // ¥12,345,678.00
string s6 = $"{b:E2}"; // 1.23E+003
當標準格式無法滿足需求時,可使用自訂格式字元組合出專屬格式。常用字元如下:
| 字元 | 名稱 | 說明 | 範例 (1234) | 範例輸出 |
|---|---|---|---|---|
0 | 零佔位符 | 不足位數補 0 | 000000 | 001234 |
# | 數字佔位符 | 不足位數不補字元 | ####### | 1234 |
. | 小數點 | 指定小數點位置 | 000.000 | 1234.000 |
, | 千分位/縮放 | 單一 , 為千分位;連續 , 為每 3 位除以 1000 | 0,0 / 0,, | 1,234 / 12 |
% | 百分比 | 數值乘 100 並加 % | 0.00% | 123400.00% |
'文字' | 常值字串 | 單引號內內容原樣輸出 | 'ID:'0 | ID:1234 |
\ | 跳脫字元 | 下一個字元視為常值 | \#0 | #1234 |
int a = 12345678;
double b = 87654321.12543;
// 固定 6 位數,不足補 0
Console.WriteLine($"{a:000000}"); // 12345678 (超過 6 位不截斷)
Console.WriteLine($"{a:D6}"); // 12345678 (標準 D6 同效果)
// 千分位分隔
Console.WriteLine($"{a:N0}"); // 12,345,678
Console.WriteLine($"{b:N2}"); // 87,654,321.13
// 縮放顯示(每個 , 除以 1000)
Console.WriteLine($"{a:0,}"); // 12346 (四捨五入)
Console.WriteLine($"{a:0,,}"); // 12
Console.WriteLine($"{a:0,,,}"); // 0
// 百分比格式
Console.WriteLine($"{0.1234:P2}"); // 12.34%
Console.WriteLine($"{0.1234:#.##%}"); // 12.34%
// 自訂字串
Console.WriteLine($"{a:'編號:'0}"); // 編號:12345678
Console.WriteLine($@"{a:\#0}"); // #12345678
雖然本文主題為數值格式化,但日期格式同樣重要,常用標準格式如下:
d:短日期 2024/01/15D:長日期 2024年1月15日t:短時間 14:30T:長時間 14:30:45f:完整日期時間(短時間)2024年1月15日 14:30F:完整日期時間(長時間)2024年1月15日 14:30:45g:一般日期時間(短時間)2024/01/15 14:30G:一般日期時間(長時間)2024/01/15 14:30:45yyyy-MM-dd HH:mm:ss:自訂常用格式 2024-01-15 14:30:45$""):語法更直觀,效能相當,編譯器會自動優化為 string.Format。value.ToString("C", CultureInfo.GetCultureInfo("zh-TW")) 避免伺服器預設文化特性導致顯示錯誤。FormattableString:延遲格式化或記錄原始格式與參數,適用於日誌、EF Core 查詢等進階場景。C# 提供極為豐富的格式化功能,從標準貨幣、科學記號到自訂位數補零、縮放顯示,幾乎能滿足所有顯示需求。熟練掌握這些格式字串,不僅能寫出更簡潔的程式碼,也能避免手動字串拼接帶來的 Bug。建議收藏本文對照表,開發時隨查隨用。