Home [C# 筆記] 字串格式化 string.Format() & ToString()
Post
Cancel

[C# 筆記] 字串格式化 string.Format() & ToString()

格式化(Format) 對於「數字字串」或「日期字串」的顯示扮演相當重要的角色。

  • 數值格式化
  • 自訂數值格式化
  • 標準DateTime格式化
  • 自訂DateTime格式化

最常遇到的問題:

  1. 字串顯示對齊
  2. 數值格式調整
  3. 日期格式調整
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1. 字串顯示對齊

姓名    數學   英文        姓名    數學   英文
張大三   99    80   ->>   張大三   99    80
李小四   88    90         李小四   88    90
小菜  69   89             小菜    69    89

2. 數值格式調整

88      088
9   ->> 009
100     100

3. 日期格式調整

1999年1月9日        1999年01月09日
2001年10月10日  ->> 2001年10月10日
2020年3月22日       2020年03月22日

數值格式化

格式功能FormatInput執行結果補充
D十進位補零{0:D3}99099D後面數字表示指定的位數
F固定浮點數,且四捨五入{0:F}5.67895.68F後面數字表示指定的位數,F預設到小數第二位
N數值表示法{0:N}120000120,000.00Number:每三位數用逗號 “,” 隔開
C貨幣值,且四捨五入{0:C}20.5678NT$20.57Currency :C預設到小數2位…C1取小數一位,C3取小數三位…
P百分比,且四捨五入{0:P}0.56756.70%Percent:輸入數值*100。預設取小數2位,P0可取小數
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// D: 十進位補零,D後面數字表示指定的位數
int i = 9;
Console.WriteLine(string.Format("{0:D2}",i)); //09
Console.WriteLine(i.ToString("D2")); //09
Console.WriteLine(string.Format("{0:D3}",i)); //009
Console.WriteLine(i.ToString("D3")); //009

// F: 固定浮點數,且四捨五入,F後面數字表示指定的位數,沒指定數字是到小數第二位
double i = 4.5678;
Console.WriteLine(string.Format("{0:F0}",i)); //5
Console.WriteLine(i.ToString("F0")); //5
Console.WriteLine(string.Format("{0:F}",i)); //4.57
Console.WriteLine(i.ToString("F")); //4.57
Console.WriteLine(string.Format("{0:F1}",i)); //4.6
Console.WriteLine(i.ToString("F1")); //4.6
Console.WriteLine(string.Format("{0:F3}",i)); //4.568
Console.WriteLine(i.ToString("F3")); //4.568

// N: 數值表示法,每三位數用逗號 "," 隔開
double i = 120000;
Console.WriteLine(string.Format("{0:N}",i)); //120,000.00
Console.WriteLine(i.ToString("N")); //120,000.00


// C: 貨幣值,且四捨五入,C預設到小數第二位
double i = 20.5678;
Console.WriteLine(string.Format("{0:C}", i)); //NT$20.57
Console.WriteLine(i.ToString("C")); //NT$20.57

// P: 百分比,且四捨五入,Percent:輸入數值*100 ; 預設取小數2位,P0可取小數
double i = 0.567;
Console.WriteLine(string.Format("{0:P}",i)); //56.70%
Console.WriteLine(i.ToString("P"));//56.70%
Console.WriteLine(string.Format("{0:P0}",i)); //57%
Console.WriteLine(i.ToString("P0"));//57%

自訂數值格式化

格式功能FormatInput執行結果補充
0預留零值位置{0:000.000}10.5679010.568會四捨五入
#預留數值位置{0:#.#}5.675.7會四捨五入
.小數點{0:0.0}5.755.8會四捨五入
,千位分隔符號{0:0,0}12001,200 
%百分比預留位置{0:0%}0.25626%會四捨五入
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 0: 預留零值位置,會四捨五入
double i = 10.5679;
Console.WriteLine(string.Format("{0:0.00}", i)); //10.57
Console.WriteLine(i.ToString("0.000")); //10.568
Console.WriteLine(i.ToString("000.00000")); //010.56790

// #: 預留數值位置,會四捨五入
double i = 5.67;
Console.WriteLine(string.Format("{0:#.#}", i)); //5.7
Console.WriteLine(i.ToString("#.#")); //5.7

// .: 小數點,會四捨五入
double i = 5.75;
Console.WriteLine(string.Format("{0:#.#}", i)); //5.8
Console.WriteLine(i.ToString("#.#")); //5.8

// ,: 千位分隔符號
double i = 1200;
Console.WriteLine(string.Format("{0:0,0}", i)); //1,200
Console.WriteLine(i.ToString("0,0")); //1,200

// %: 百分比預留位置,,會四捨五入 {0:0%}	0.25	25%
double i = 0.256;
Console.WriteLine(string.Format("{0:0%}", i)); //26%
Console.WriteLine(i.ToString("0%")); //26%

電話號碼格式化:

1
2
3
4
5
int number = 0222309988;
Console.WriteLine(number.ToString("(0#)####-####")); //(02)2230-9988

int number = 0900666555;
Console.WriteLine(number.ToString("0###-###-###")); //0900-666-555

標準 DateTime 格式化

2010/8/11 下午 01:02:03

格式功能Format執行結果補充
d簡短日期{0:d}2010/8/11MM/dd/yyyy
D完整日期{0:D}2010年8月11日 
f完整可排序日期/時間{0:f}2010年8月11日 下午 01:02 
F完整可排序日期/時間{0:F}2010年8月11日 下午 01:02:03 
g一般可排序日期/時間{0:g}2010/8/11 下午 01:02 
G一般可排序日期/時間{0:G}2010/8/11 下午 01:02:03 
Mm月日{0:m}8月11日 
Yy年月{0:y}2010年8月 
t簡短時間{0:t}下午 01:02HH:mm
T完整時間{0:T}下午 01:02:03HH:mm:ss
1
2
3
4
5
6
7
8
9
10
//2024/5/6 下午 11:23:38
Console.WriteLine(DateTime.Now.ToString("d")); //2024/5/6
Console.WriteLine(DateTime.Now.ToString("D")); //2024年5月6日
Console.WriteLine(DateTime.Now.ToString("t")); //下午 11:21
Console.WriteLine(DateTime.Now.ToString("T")); //下午 11:21:59
Console.WriteLine(DateTime.Now.ToString("F")); //2024年5月6日 下午 11:23:38
Console.WriteLine(DateTime.Now.ToString("f")); //2024年5月6日 下午 11:23
Console.WriteLine(DateTime.Now.ToString("G")); //2024/5/6 下午 11:23:38
Console.WriteLine(DateTime.Now.ToString("M")); //5月6日
Console.WriteLine(DateTime.Now.ToString("Y")); //2024年5月

自訂 DateTime 格式化

2024/5/6 下午 11:23:38

格式功能Format執行結果補充 
yy西元年後2位{0:yy}24  
yyyy顯示西元年{0:yyyy}2024  
MM月份{0:MM}05個位數月份前面會補0 
MMM月份的縮寫名稱{0:MMM}三月Mar 
MMMM月份的完整名稱{0:MMMM}三月March 
dd日期{0:dd}06個位數日期前面會補0 
ddd星期幾的縮寫{0:ddd}星期日Sun 
dddd星期幾的完整名稱{0:dddd}星期日Sunday 
hh小時(12 小時制){0:hh}11  
HH小時(24 小時制){0:HH}23  
mm分鐘{0:mm}38  
ss秒數{0:ss}49  
ttA.M./P.M.{0:tt}下午  
:時間分隔符號{0:hh:mm:ss}02:29:06  
/日期分隔符號{0:yyyy/MM/dd}2024/05/06  
  "yyyy/MM/dd tt hh:mm:ss"2024/05/06 PM 04:01:57  
1
2
3
4
5
6
7
8
9
Console.WriteLine(DateTime.Now.ToString("yy")); //24
Console.WriteLine(DateTime.Now.ToString("yyyy")); //2024
Console.WriteLine(DateTime.Now.ToString("MM")); //05
Console.WriteLine(DateTime.Now.ToString("dd")); //06
Console.WriteLine(DateTime.Now.ToString("ddd")); // May
Console.WriteLine(DateTime.Now.ToString("dddd")); // Monday
Console.WriteLine(DateTime.Now.ToString("tt")); //PM
Console.WriteLine(DateTime.Now.ToString("hh:mm:ss")); //04:01:18
Console.WriteLine(DateTime.Now.ToString("yyyy/MM/dd tt hh:mm:ss")); //2024/05/06 PM 04:01:57

MSDN - 標準數值格式字串
[C#] string.Format 格式整理
Book: Visual C# 2005 建構資訊系統實戰經典教本

This post is licensed under CC BY 4.0 by the author.

[C# 筆記] String.CompareTo 方法

[C# 筆記] StringBuilder 類別