C# 字符串格式化、数字解析与日期处理全指南
掌握 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 | 完整日期和时间 |
r | RFC1123 (Web/HTTP 日志常用) |
S | ISO 8601 可排序格式 |
当需要获取绝对不带地域色彩的格式(如美国样式)时,可使用 DateTimeFormatInfo.InvariantInfo 作为第二个参数传递,从而避免受服务器本地 CurrentInfo 的影响:
var invariantFormat = DateTimeFormatInfo.InvariantInfo;
Console.WriteLine(dt.ToString("D", invariantFormat)); // 固定输出类似 01/03/2002
5. 总结
通过灵活组合索引、宽度和格式标识符,可以高效处理各类数据的展示需求。在处理不同来源的数据时,善用 CultureInfo 和 NumberStyles 能有效避免因地区和编码差异导致的解析错误。以上就是 C# 字符串格式化、数字解析与日期处理的详细内容,更多关于 C# 开发技巧的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













