C#中String.Format用法详解:格式字符串与实例解析

小鹿同学
小鹿同学
发布时间:2026-10-14| 4人浏览过
原创

C#中的String.Format方法提供了灵活的文本格式化能力。本文解析其常用重载,并通过代码示例展示如何针对数值(包括货币、科学计数法、整数补零)和日期时间应用标准与自定义格式字符串,满足实际开发中对数据呈现的多样化需求。

方法定义与应用场景

String.Format 是 .NET 中用于将对象值转换为字符串并进行格式化的核心静态方法。它支持多种重载,以适应不同数量的参数。

第1步:选择适合的重载方法

目的:根据需要格式化的变量数量选择正确的 API入口。

  • 单参数:String.Format(String, Object)。适用于替换单个占位符的场景。
  • 双/三参数:String.Format(String, Object, Object) 或 String.Format(String, Object, Object, Object)。常见于拼接简短语句,如 "Hello {0}, your age is {1}."。
  • 数组参数:String.Format(String, Object[])。适用于参数数量较多或不确定的场景,只需将值放入数组即可。
  • 区域性特定格式:String.Format(IFormatProvider, String, Object[])。若需根据特定文化背景(如语言环境下的货币符号或日期样式)格式化,需传入 IFormatProvider。

数值格式化的常用方式

格式化数值主要通过“标准格式字符串”和“自定义格式字符串”两种方式完成。以下表格整理了常用的标准格式字符及其对应行为:

字符说明示例输入输出结果
C货币string.Format("{0:C3}", 2)¥2.000 (取决于系统区域设置)
D十进制 (Decimal)string.Format("{0:D3}", 2)002
E科学计数法string.Format("{0:E5}", 12000)1.20000E+004
G常规 (General)string.Format("{0:G}", 2)2
N用逗号分隔的数字string.Format("{0:N}", 250000)250,000.00
X十六进制 (Hexadecimal)string.Format("{0:X0000}", 12)000C

第2步:使用标准说明符进行常见格式化

1. 数字精度与千分位 (N & F)

N 会在数字中添加千分位分隔符并保留小数;F 仅用于保留固定小数位数,不加千分位。

// 千分位保留1位小数: 56,789.0
string str1 = string.Format("{0:N1}", 56789);
// 不带千分位,保留2位小数: 56789.00
string str2 = string.Format("{0:F2}", 56789); // 注意此处原示例有误,F通常不添加千分位

2. 货币格式化 (C)

货币格式自动根据操作系统环境显示对应的货币符号(如人民币¥或美元$),默认保留两位小数。

// 中文系统环境下通常输出为: ¥0.20
string strMoney = string.Format("{0:C}", 0.2);

// 指定保留一位小数,会自动四舍五入
string strMoney1 = string.Format("{0:C1}", 23.15); // 结果: ¥23.2

3. 整数补零 (D)

D 用于整数。如果指定的位数小于数字实际长度,则按实际长度输出;否则在左侧补零。

// 结果为 023
string strPad = string.Format("{0:D3}", 23);
// 结果为 1223 (因为23本身已超过2位)
string strNoPad = string.Format("{0:D2}", 1223); 

4. 百分比转换 (P)

将小数乘以100并显示百分号,默认保留两位小数。

// 结果为 24.58%
string strPercent = string.Format("{0:P}", 0.24583);
// 结果为 24.6% (四舍五入)
string strPercent1 = string.Format("{0:P1}", 0.24583);

第3步:处理复杂格式与自定义规则

除了标准字符,可以使用自定义数字格式字符串:0 代表强制占位(若无数字则显示0),# 代表可选占位(若无数字则不显示)。

// 强制显示3位整数,不足补0; 强制显示2位小数
string res1 = string.Format("{0:0000.00}", 194.039); // 结果: 0194.04

// # 不会显示无意义的0,但若有效数字存在则会显示
string res2 = string.Format("{0:###.##}", 12394.039); // 结果: 12394.04

日期时间的格式化

DateTime 同样可以通过 String.Format 结合标准日期/时间格式字符串来转换,这些字符串依赖于当前的文化设置。

第4步:应用标准日期格式字母

假设当前时间为 System.DateTime.Now:

// 短日期格式: 2023-3-20 (月日不带前导0)
string d1 = string.Format("{0:d}", System.DateTime.Now);

// 长日期格式: 2023年3月20日
string d2 = string.Format("{0:D}", System.DateTime.Now);

// 完整日期+短时间: 2023-3-20 15:37
string d3 = string.Format("{0:f}", System.DateTime.Now);

// 完整日期+长时间: 2023-3-20 15:37:52
string d4 = string.Format("{0:F}", System.DateTime.Now);

// 短时间: 15:37
string d5 = string.Format("{0:t}", System.DateTime.Now);

// 长时间: 15:37:52
string d6 = string.Format("{0:T}", System.DateTime.Now);

注:对于更复杂的定制格式(如 “yyyy-MM-dd HH:mm:ss”),直接使用带有转义字符的模式串更为常见且灵活。

多值合并示例

在实际业务中,常需要将多个不同类型的值组合到一个字符串中。

decimal originalPrice = 23.15m;
decimal discountPrice = 19.82m;

// 在一个字符串中同时格式化原价和折后价
string msg = string.Format("市场价:{0:C},优惠价:{1:C}", originalPrice, discountPrice);
// 输出示例: 市场价:¥23.15,优惠价:¥19.82

以上就是 C# 中 String.Format 用法详解的详细内容,更多关于 C# 字符串处理的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。