菜鸟的C#学习(四)
文章目录
- 一、格式说明符
- 1.1、数字格式说明符(适用于数值类型:int, double, decimal 等)
- 1. 标准数字格式
- 2. 自定义数字格式
- 1.2、日期时间格式说明符(适用于 DateTime, DateTimeOffset)
- 1. 标准日期时间格式
- 2. 自定义日期时间格式
- 1.3、枚举格式说明符(适用于 enum 类型)
- 1.4、组合格式示例
- 二、
- 三、
- 四、
一、格式说明符
C# 中的格式说明符用于格式化各种数据类型的字符串表示,主要分为以下几类,按数据类型分类列举并提供组合示例:
1.1、数字格式说明符(适用于数值类型:int, double, decimal 等)
1. 标准数字格式
-
C
/c
:货币格式(自动添加货币符号,受当前文化影响)Console.WriteLine($"{1234.56:C}"); // ¥1,234.56(中文环境)
-
D
/d
:十进制整数格式(指定位数时不足补0)Console.WriteLine($"{123:D5}"); // 00123(固定5位)
-
E
/e
:科学计数法(E为大写,e为小写)Console.WriteLine($"{1234.56:E3}"); // 1.235E+003(保留3位小数)
-
F
/f
:固定小数位格式Console.WriteLine($"{1234.567:F2}"); // 1234.57(保留2位小数)
-
G
/g
:通用格式(自动选择最简洁的表示)Console.WriteLine($"{1234.567:G4}"); // 1235(总位数4位,四舍五入)
-
N
/n
:带千分位分隔符的数字Console.WriteLine($"{1234567:N2}"); // 1,234,567.00
-
P
/p
:百分比格式(数值乘以100并加%)Console.WriteLine($"{0.123:P1}"); // 12.3%(保留1位小数)
-
X
/x
:十六进制格式(X大写,x小写)Console.WriteLine($"{255:X2}"); // FF(2位大写) Console.WriteLine($"{255:x4}"); // 00ff(4位小写)
2. 自定义数字格式
0
:占位符(位数不足补0,超出则原样显示)#
:占位符(位数不足不补0,超出则原样显示).
:小数点,
:千分位分隔符(可重复表示比例缩放,如,,
表示除以100万)%
:百分比(数值乘以100)\
:转义字符(显示特殊符号)
示例:
// 整数部分至少3位,小数部分固定2位
Console.WriteLine($"{12.3:000.00}"); // 012.30// 整数部分可选,小数部分最多2位(不补0)
Console.WriteLine($"{1234.567:###.##}"); // 1234.57// 千分位分隔+比例缩放(除以1000,显示为"千")
Console.WriteLine($"{1234567:###,}k"); // 1235k(四舍五入到千位)// 混合百分比和自定义格式
Console.WriteLine($"{0.1234:00.0%}"); // 12.3%
1.2、日期时间格式说明符(适用于 DateTime, DateTimeOffset)
1. 标准日期时间格式
d
:短日期(如2023/10/05
)D
:长日期(如2023年10月5日
)t
:短时间(如14:30
)T
:长时间(如14:30:45
)f
:完整日期+短时间(如2023年10月5日 14:30
)F
:完整日期+长时间(如2023年10月5日 14:30:45
)g
:常规日期+短时间(如2023/10/05 14:30
)G
:常规日期+长时间(如2023/10/05 14:30:45
)s
:可排序日期时间(如2023-10-05T14:30:45
,ISO 8601)u
:UTC可排序时间(如2023-10-05 14:30:45Z
)
示例:
DateTime dt = new DateTime(2023, 10, 5, 14, 30, 45);
Console.WriteLine($"{dt:d}"); // 10/5/2023
Console.WriteLine($"{dt:G}"); // 10/5/2023 14:30:45
2. 自定义日期时间格式
y
/yy
/yyy
/yyyy
:年(如23
/2023
)M
/MM
:月(1
-12
/01
-12
)d
/dd
:日(1
-31
/01
-31
)h
/hh
:12小时制时(1
-12
/01
-12
)H
/HH
:24小时制时(0
-23
/00
-23
)m
/mm
:分(0
-59
/00
-59
)s
/ss
:秒(0
-59
/00
-59
)f
/ff
/fff
:毫秒(1位/2位/3位)t
:上午/下午(A
/P
)z
/zz
/zzz
:时区偏移(如+08
/+08:00
)
示例:
DateTime dt = new DateTime(2023, 10, 5, 14, 30, 45, 123);
// 格式:年-月-日 时:分:秒.毫秒 时区
Console.WriteLine($"{dt:yyyy-MM-dd HH:mm:ss.fff zzz}");
// 输出:2023-10-05 14:30:45.123 +08:00
1.3、枚举格式说明符(适用于 enum 类型)
G
/g
:默认(显示枚举名, Flags 组合时用逗号分隔)F
/f
:Flags 组合时强制显示所有名称(即使未标记 Flags)D
/d
:显示枚举的基础数值X
/x
:显示基础数值的十六进制形式
示例:
[Flags]
enum MyEnum { A = 1, B = 2, C = 4 }
MyEnum val = MyEnum.A | MyEnum.C;Console.WriteLine($"{val:G}"); // A, C(名称组合)
Console.WriteLine($"{val:D}"); // 5(基础数值)
Console.WriteLine($"{val:X}"); // 00000005(十六进制)
1.4、组合格式示例
- 数字+日期组合:
var data = new { Amount = 1234.56, Date = new DateTime(2023, 10, 5) };
Console.WriteLine($"{data.Date:yyyy-MM-dd} 交易金额:{data.Amount:C2}");
// 输出:2023-10-05 交易金额:¥1,234.56
- 自定义数字+转义字符:
double ratio = 0.7532;
Console.WriteLine($"完成率:{ratio:00.00%}({ratio:0.##})");
// 输出:完成率:75.32%(0.75)
- 时间+毫秒精度:
DateTime dt = DateTime.Now;
Console.WriteLine($"当前时间:{dt:HH:mm:ss.fff}");
// 输出:当前时间:15:42:36.789
说明
- 格式说明符区分大小写(如
X
和x
分别对应大小写十六进制)。 - 可通过
IFormatProvider
自定义文化(如指定CultureInfo.InvariantCulture
避免地区差异)。 - 组合使用时,多个格式说明符需按类型规则拆分(如数字和日期需分别指定格式)。