在日常开发中,我们经常需要对数字进行格式化输出——无论是显示金额、科学计数、补零对齐,还是转成十六进制。C# 提供了非常灵活且强大的数字格式化机制,只需一个 ToString() 方法配合格式字符串,就能轻松搞定各种需求。
今天,我们就系统梳理一下 C# 中常见的数字格式化转换方式,让你从此告别“手动拼字符串”的原始操作!
一、使用 "0" 和 "#" 占位符:精准控制位数
这是最基础也最常用的自定义数字格式方式。通过 "0" 和 "#" 两个占位符,我们可以精确控制整数和小数的显示位数。
| 符号 | 行为说明 |
|---|---|
"0" | 强制占位符。如果实际位数不足,用 0 补齐;若小数位超出指定长度,则四舍五入。 |
"#" | 可选占位符。仅在有有效数字时显示,不会补 0,常用于避免前导零或尾随零。 |
示例代码:
Console.WriteLine(15.ToString("000")); // 输出:015
Console.WriteLine(10.456.ToString("0.00")); // 输出:10.46(四舍五入)
Console.WriteLine(10.456.ToString("00")); // 输出:10(只保留整数部分)
Console.WriteLine(10.456.ToString("value is 0.0")); // 输出:value is 10.5
💡 小技巧:你甚至可以在格式字符串中嵌入文字(如 "订单: 0000"),实现带描述的输出!
📌 注意:
"0"会强制显示该位置,即使值为 0;"#"在无数字时不显示,例如123.ToString("#,##0")→123,而123.ToString("0,000")→0,123。
二、内置标准格式:一行代码搞定专业显示
C# 内置了多种标准数字格式字符串(Standard Numeric Format Strings),用单个字母(可选精度参数)即可快速实现常见格式。
| 格式符 | 名称 | 说明 | 示例 |
|---|---|---|---|
E | 科学计数法 | 默认 6 位小数,指数形式 | (25000).ToString("E") → 2.500000E+004 |
C | 货币 | 根据当前线程的 区域设置 自动添加货币符号、千分位、保留 2 位小数 | (2.5).ToString("C") → ¥2.50(中文系统)或 $2.50(英文系统) |
D | 十进制整数 | 仅用于整型,可指定最小位数(不足补前导零) | (25).ToString("D5") → 00025 |
F | 固定点 | 保留指定小数位(默认 2 位),不带千分位 | (25).ToString("F2") → 25.00 |
G | 常规 | 自动选择最紧凑表示(F 或 E),保留指定有效数字 | (2.52).ToString("G2") → 2.5 |
N | 数字 | 带千分位分隔符,默认保留 2 位小数 | (2500000).ToString("N") → 2,500,000.00 |
X | 十六进制 | 仅适用于 整数类型(int, long 等) | (255).ToString("X") → FF;(255).ToString("x4") → 00ff(小写) |
完整示例:
class Program
{
static void Main()
{
Console.WriteLine((25000).ToString("E")); // 2.500000E+004
Console.WriteLine((2.5).ToString("C")); // ¥2.50(取决于 CultureInfo)
Console.WriteLine((25).ToString("D5")); // 00025
Console.WriteLine((25).ToString("F2")); // 25.00
Console.WriteLine((2.52).ToString("G2")); // 2.5
Console.WriteLine((2500000).ToString("N")); // 2,500,000.00
Console.WriteLine((255).ToString("X")); // FF
Console.WriteLine((255).ToString("x4")); // 00ff(小写 + 补零)
}
}
⚠️ 重要提醒:
X格式仅支持整数类型,对double、decimal使用会抛出FormatException。- 货币符号、千分位分隔符(
,还是空格?)、小数点符号(.还是,?)均受CultureInfo影响
如需固定格式,可显式指定文化信息:
(1234.56).ToString("C", CultureInfo.GetCultureInfo("en-US")); // $1,234.56
三、自定义格式的高级玩法
除了标准格式,你还可以自由组合 "0"、"#", 以及文字、符号、分组分隔符等,打造专属格式。
实用示例:
// 补零 + 文字描述
Console.WriteLine(7.ToString("订单号: 0000")); // 订单号: 0007
// 控制小数 + 单位
Console.WriteLine(98.765.ToString("温度: 0.0℃")); // 温度: 98.8℃
// 千分位 + 自定义小数(使用 #,##0.00)
Console.WriteLine(1234567.89.ToString("#,##0.00")); // 1,234,567.89
// 百分比格式(自动 ×100 并加 %)
Console.WriteLine(0.875.ToString("P1")); // 87.5%
🔍 千分位说明:
使用#,##0表示每三位加一个分隔符(具体符号由区域决定)。
例如在德语环境可能显示为1.234.567,89。
四、格式化速查表
| 应用场景 | 推荐格式 | 示例输入 → 输出 |
|---|---|---|
| 编号补零(5位) | "D5" 或 "00000" | 25 → 00025 |
| 显示人民币金额 | "C" | 123.4 → ¥123.40 |
| 科学数据展示 | "E3" | 12345 → 1.234E+004 |
| 日常大数阅读 | "N0"(无小数) | 1000000 → 1,000,000 |
| 精确保留2位小数 | "F2" 或 "0.00" | 3.14159 → 3.14 |
| 转十六进制(大写) | "X4" | 255 → 00FF |
| 百分比显示 | "P2" | 0.75 → 75.00% |
五、最佳实践建议
- ✅ 优先使用标准格式(如
"N","C"),它们更简洁且符合本地化习惯; - ✅ 自定义格式用于特殊业务需求(如工单号、仪表盘显示);
- ❌ 避免硬编码货币符号(如
"¥0.00"),应依赖CultureInfo实现国际化; - 🔒 格式化 ≠ 验证:格式化仅改变显示,不影响数值本身。
结语
掌握 C# 的数字格式化,不仅能写出更优雅的代码,还能提升用户体验(尤其是多语言/多地区场景)。下次再遇到“怎么让数字显示得更漂亮”的问题,你就知道答案了!
9634

被折叠的 条评论
为什么被折叠?



