C#中String.Format用法详解:格式字符串与实例解析
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.23. 整数补零 (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# 字符串处理的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









