C# 字符串格式化、数字解析与日期处理全指南

雨后青山
雨后青山
发布时间:2026-10-13| 5人浏览过
原创

掌握 C# 字符串格式化能显著提升数据处理能力。本文将拆解 String.Format 与 Console.WriteLine 的核心参数结构,详解货币、十进制、十六进制等标准格式符,并通过 NumberStyles 和 CultureInfo 演示如何处理复杂数字解析及跨文化日期的正确显示。

1. 基础格式化语法与对齐控制

在 C# 中,String.Format 和 Console.WriteLine 遵循相同的格式化规则。其核心格式为 { N [, M][: formatString ]},其中:

  • N:从 0 开始的索引,表示对应参数的位置。
  • M(可选):指定总宽度。若为正数则右对齐,负数则左对齐。
  • formatString(可选):具体的格式代码,如货币符号或位数限制。

当参数为空值时,默认替换为空字符串;若未指定 formatString,则调用参数对应的 ToString() 方法。以下代码展示了三种输出效果:

public class TestConsoleApp
{
 public static void Main(string[] args)
 {
  // 默认输出
  Console.WriteLine(123);
  // 显式索引
  Console.WriteLine("{0}", 123);
  // D3 表示至少3位十进制整数,不足补0
  Console.WriteLine("{0:D3}", 123); 
 }

通过组合宽度和格式码,可以实现表格式的对齐输出。例如 {0,-10:D6} 表示左对齐且占据10个字符宽度,内部数值以6位十进制显示:

Console.WriteLine("{0,-10}{1,-3}", "Name","Salary");
Console.WriteLine("----------------");
Console.WriteLine("{0,-10}{1,6}", "Bill", 123456);
Console.WriteLine("{0,-10}{1,6}", "Polly", 7890);

2. 数字格式标识符详解

标准数字格式字符串由字母标识符和精度指示符组成。常见标识符包括:

  • C/c:货币格式。
  • D/d:十进制(仅用于整数)。
  • E/e:科学计数法(指数)。
  • F/f:定点数(小数位数)。
  • G/g:常规格式(较短的小数或科学计数法)。
  • N/n:带千位分隔符的数字。
  • P/p:百分比格式。
  • R/r:往返格式(Round-trip),确保浮点数转换后精度不丢失。
  • X/x:十六进制格式。

精度指示符位于冒号后,控制有效数字或小数位数。例如 {0:C5} 保留五位小数,而 {0:X} 将整数转为十六进制:

int i = 123456;
Console.WriteLine($"{i,10:C}");    // ¥123,456.00
Console.WriteLine($"{i,10:E}");    // 1.234560E+005
Console.WriteLine($"{i,10:X}");    // 1E240

对于自定义复杂格式,可使用占位符构建模式,支持定位、千分位缩放及正负数分支显示:

double d = 123456.42;
Console.WriteLine($"{d:0,.}");      // 123 (单位缩减一千倍)
Console.WriteLine($"{d:#0.000;(#0.000)}"); // 正值显示三位小数,负值括号包裹
Console.WriteLine($"{d:#%}");       // 12345642%

3. 数字字符串解析与区域化设置

使用 int.Parse() 或 Double.Parse() 可将字符串还原为数值。默认情况下,解析器会忽略首尾空格,但若要兼容逗号千分位或货币符号,需引入 System.Globalization 命名空间:

  • NumberStyles:通过位掩码组合定义允许的非数字字符,如 AllowThousands 或 AllowCurrencySymbol。
  • CultureInfo:代表特定地区(如 en-US 或 da-DK),不仅影响解析,还决定 ToString() 时的默认货币或日期样式。

示例:根据丹麦文化解析带有货币符号的数字:

string u = "¥ -1,234,567.890 ";
NumberFormatInfo ni = new NumberFormatInfo();
ni.CurrencySymbol = "¥";
double h = Double.Parse(u, NumberStyles.Any, ni);
// 结果 h = -1234567.89

4. 日期与时间的格式化模式

DateTime 对象基于内置的 DateTimeFormatInfo 进行格式化。开发者可通过传入特定的“标准格式字符串”来选择预定义的显示模板,或通过自定义字符串精确控制:

标识符对应模式
D短日期 (MM/dd/yyyy)
F完整日期和时间
rRFC1123 (Web/HTTP 日志常用)
SISO 8601 可排序格式

当需要获取绝对不带地域色彩的格式(如美国样式)时,可使用 DateTimeFormatInfo.InvariantInfo 作为第二个参数传递,从而避免受服务器本地 CurrentInfo 的影响:

var invariantFormat = DateTimeFormatInfo.InvariantInfo;
Console.WriteLine(dt.ToString("D", invariantFormat)); // 固定输出类似 01/03/2002

5. 总结

通过灵活组合索引、宽度和格式标识符,可以高效处理各类数据的展示需求。在处理不同来源的数据时,善用 CultureInfo 和 NumberStyles 能有效避免因地区和编码差异导致的解析错误。以上就是 C# 字符串格式化、数字解析与日期处理的详细内容,更多关于 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 算法库。