首页 > 编程笔记

C# Format():格式化字符串

在 C# 中,string 类提供了一个静态的 Format 方法,用于将字符串数据格式化成指定的格式,其常用的语法格式如下。
public static string Format(string format,Object arg0)
public static string Format(string format,params Object[] args)
其中,format 参数用来指定字符串所要格式化的格式,基本格式如下。
{index[,length][:formatString]}

格式化字符串主要有两种情况,分别是数值类型数据的格式化和日期时间类型数据的格式化,下面分别讲解。

1、数值类型的格式化

实际开发中,数值类型有多种显示方式,如货币形式、百分比形式等,C# 支持的标准数值格式规范如下表所示。

表 1 C#支持的标准数值格式规范
格式说明符 名 称 说 明 示 例
C 或 c 货币 结果:货币值
受以下类型支持:所有数值类型
精度说明符:小数位数
¥123 或 ¥-123.456
D 或 d Decimal 结果:整数类型数字,负号可选
受以下类型支持:仅整数类型
精度说明符:最小位数
1234 或 -001234
E 或 e 指数(科学型) 结果:指数记数法
受以下类型支持:所有数值类型
精度说明符:小数位数
1.052033E+003 或 -1.05e+003
F 或 f 定点 结果:整数和小数,负号可选
受以下类型支持:所有数值类型
精度说明符:小数位数
1234.57 或 -1234.5600
N 或 n Number 结果:整数和小数、组分隔符和小数分隔符,负号可选
受以下类型支持:所有数值类型
精度说明符:所需的小数位数
1234.57或−1234.560
P 或 p 百分比 结果:乘以 100 并显示百分比符号的数字
受以下类型支持:所有数值类型
精度说明符:所需的小数位数
100.00 % 或 100 %
X 或 x 十六进制 结果:十六进制字符串
受以下类型支持:仅整数类型
精度说明符:结果字符串中的位数
FF 或 00ff

注意,使用 string.Format 方法对数值类型数据进行格式化时,传入的参数必须为数值类型。

使用上表中的标准数值格式规范对不同的数值类型数据进行格式化并输出,代码如下:
static void Main(string[] args)
{
    //输出金额
    Console.WriteLine(string.Format("1251+3950的结果是(以货币形式显示):{0:C}", 1251 + 3950));
    //输出科学记数法
    Console.WriteLine(string.Format("120000.1用科学记数法表示:{0:E}", 120000.1));
    //输出以分隔符显示的数字
    Console.WriteLine(string.Format("12800以分隔符数字显示的结果是{0:N0}", 12800));
    //输出小数点后两位
    Console.WriteLine(string.Format("π取小数点后两位:{0:F2}", Math.PI));
    //输出十六进制
    Console.WriteLine(string.Format("33的十六进制结果是{0:X4}", 33));
    //输出百分号数字
    Console.WriteLine(string.Format("天才是由 {0:P0} 的灵感,加上 {1:P0} 的
                                   汗水 。", 0.01, 0.99));
    Console.ReadLine();
}
程序运行结果为:

1251+3950的结果是(以货币形式显示):¥5,201.00 
120000.1用科学记数法表示:1.200001E+05 
12800以分隔符数字显示的结果是12,800 
π取小数点后两位:3.14 
33的十六进制结果是0021 
天才是由 1% 的灵感,加上 99% 的汗水 。

2、日期时间类型的格式化

如果希望日期时间按照某种标准格式输出,如短日期格式、完整日期时间格式等,那么可以使用 string 类的 Format 方法将日期时间格式化为指定的格式。

C# 支持的标准日期时间类型格式规范如下表所示。

表 2 C#支持的标准日期时间类型格式规范
格式说明符 说 明 形 式
d 短日期格式 YYYY-MM-dd
D 长日期格式 YYYY年MM月dd日
f 完整日期/时间格式(短时间) YYYY年MM月dd日 hh:mm
F 完整日期/时间格式(长时间) YYYY年MM月dd日 hh:mm:ss
g 常规日期/时间格式(短时间) YYYY-MM-dd hh:mm
G 常规日期/时间格式(长时间) YYYY-MM-dd hh:mm:ss
M 或 m 月/日格式 MM月dd日
t 短时间格式 hh:mm
T 长时间格式 hh:mm:ss
Y 或 y 年/月格式 YYYY年MM月

注意,使用 string.Format 方法对日期时间类型数据进行格式化时,传入的参数必须为 DataTime 类型。

例如,使用上表中的标准日期时间类型格式规范对不同的日期时间类型数据进行格式化并输出,代码如下:
static void Main(string[] args)
{
     DateTime strDate = DateTime.Now;   //获取当前日期时间
     //输出短日期格式
     Console.WriteLine(string.Format("当前日期的短日期格式表示:{0:d}", strDate));
     //输出长日期格式
     Console.WriteLine(string.Format("当前日期的长日期格式表示:{0:D}", strDate));
     Console.WriteLine();//换行
     //输出完整日期/时间格式(短时间)
     Console.WriteLine(string.Format("当前日期时间的完整日期/时间格式(短时间)
         表示:{0:f}", strDate));
     //输出完整日期/时间格式(长时间)
     Console.WriteLine(string.Format("当前日期时间的完整日期/时间格式(长时间)
         表示:{0:F}", strDate));
     Console.WriteLine();//换行
     //输出常规日期/时间格式(短时间)
     Console.WriteLine(string.Format("当前日期时间的常规日期/时间格式(短时间)
         表示:{0:g}", strDate));
     //输出常规日期/时间格式(长时间)
     Console.WriteLine(string.Format("当前日期时间的常规日期/时间格式(长时间)表示:{0:G}", strDate));
     Console.WriteLine();//换行
     //输出短时间格式
     Console.WriteLine(string.Format("当前时间的短时间格式表示:{0:t}", strDate));
     //输出长时间格式
     Console.WriteLine(string.Format("当前时间的长时间格式表示:{0:T}", strDate));
     Console.WriteLine(); //换行
     //输出月/日格式
     Console.WriteLine(string.Format("当前日期的月/日格式表示:{0:M}", strDate));
     //输出年/月格式
     Console.WriteLine(string.Format("当前日期的年/月格式表示:{0:Y}", strDate));
     Console.ReadLine();
}
第三行代码中,获取当前时间时用到了 DateTime 结构,该结构是 .NET Framework 自带的,表示时间上的一刻,通常以日期和当天的时间表示。DateTime.Now 用来获取计算机上的当前日期和时间。

程序运行结果为:

当前日期的短日期格式表示:2023-03-15 
当前日期的长日期格式表示:星期三, 2023年3月15日 
 
当前日期时间的完整日期/时间格式(短时间)表示:2023年3月15日 15:45 
当前日期时间的完整日期/时间格式(长时间)表示:2023年3月15日 15:45:30 
 
当前日期时间的常规日期/时间格式(短时间)表示:2023-03-15 15:45 
当前日期时间的常规日期/时间格式(长时间)表示:2023-03-15 15:45:30 
 
当前时间的短时间格式表示:15:45 
当前时间的长时间格式表示:15:45:30 
 
当前日期的月/日格式表示:3月15日 
当前日期的年/月格式表示:2023年3月


通过在 ToString 方法中传入指定的“格式说明符”,也可以实现对数值类型数据和日期时间类型数据的格式化。例如,下面的代码分别使用 ToString 方法将数字 1298 格式化为货币形式、将当前日期格式化为年/月格式,代码如下。
int money = 1298;
Console.WriteLine(money.ToString("C")); //使用ToString方法格式化数值类型数据
Console.WriteLine(money.ToString("000000")); //使用ToString方法格式化为6位数字
DateTime dTime = DateTime.Now;
Console.WriteLine(dTime.ToString("Y")); //使用ToString方法格式化日期时间类型数据

推荐阅读