C# 数字格式化全攻略:从占位符到快捷字母,一文掌握!

C# 字符串格式化 也就是说,若要单独使用自定义格式说明符“d”、“f”、“F”、“h”、“m”、“s”、“t”、“y”、“z”、“H”或“M”,请指定“%d”、“%f”、“%F”、“%h”、“%m”、“%s”、“%t”、“%y”、“%z”、“%H”或“%M”。如果“E”、“E+”、“E-”、“e”、“e+”或“e-”中的任何一个字符串出现在格式字符串中,而且后面紧跟至少一个“0”字符,则数字用科学记数法来格式化,在数字和指数之间插入“E”或“e”。“E”、“E-”、“e”或“e-”格式指示符号字符仅置于负指数前面。 阅读详情

在日常开发中,我们经常需要对数字进行格式化输出——无论是显示金额、科学计数、补零对齐,还是转成十六进制。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# 的数字格式化,不仅能写出更优雅的代码,还能提升用户体验(尤其是多语言/多地区场景)。下次再遇到“怎么让数字显示得更漂亮”的问题,你就知道答案了!

C#数字格式化全解析:从基础到进阶的实战指南 在 C# 开发中,数字格式化是一项基础却至关重要的技能。无论是展示货币金额、百分比数据,还是控制浮点数的小数位数,恰当的格式化都能让数据呈现更清晰、更专业。本文将全面梳理 C# 数字格式化的核心知识,从基础语法到高级技巧,结合实例详解各种场景下的最佳实践。 阅读详情

相关推荐

M1/M2 Mac用户看过来:不装VirtualBox,用PD虚拟机也能跑ENSP的保姆级教程

本文为M1/M2 Mac用户提供了一份不依赖VirtualBox,使用Parallels Desktop虚拟机运行ENSP的详细指南。通过ARM架构的Win10镜像选择、组件替代方案和网络配置优化,实现ENSP核心功能的高效运行,特别适合网络工程师在苹果芯片设备上进行网络模拟。

weixin_28683065的博客 411

【C#基础详解】(四)占位符和转义符

学习占位符的使用和常用的转义符。

伯恩的博客 6235

VisionPro实战:5个工业视觉检测案例详解(附代码片段)

本文详细解析了VisionPro在工业视觉检测中的5个实战案例,包括PCB焊点质量检测、汽车齿轮尺寸测量、药品包装缺陷检测等。通过硬件配置方案和软件算法流程的详细介绍,帮助工程师快速掌握VisionPro的应用技巧,提升工业自动化检测效率。

weixin_29284657的博客 518

C#占位符

在c#中有两种方式可以输出多个字符 其中的一种: static void Main() { string c=Console.ReadLine(); string d=Console.ReadLine(); Console.WriteLine(c+","+d); ...

weixin_33762321的博客 1108

出现 has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ header is present on the 解决方法

Access to XMLHttpRequest at 'http://127.0.0.1:5000/api/data' from origin 'http://10.197.0.79:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

码农研究僧的博客 1万+

飞牛fnNAS搭建web版微信

摘要:本文介绍了一种通过Docker在飞牛NAS上部署微信客户端的方法,实现24小时同步微信聊天记录。具体步骤包括:1)激活飞牛NAS的Docker功能并配置镜像加速源;2)创建专用文件夹并下载docker-wechat镜像;3)设置容器参数并部署微信客户端;4)通过局域网或ZeroTier内网穿透实现远程访问。相比传统Windows/Linux方案,该方法资源占用更低,适合需要长期保存微信聊天记录的用户。

dgnankai的专栏 3330

C# 数字格式化方法全面解析

C# 数字格式化方法全面解析

yhj68100055的博客 1547

CAN 通信测试工具 canutils

概述 CAN,Controller Area Network,控制器局域网,一种高可靠性的现场总线。广泛用于汽车电子、工业控制通信。 canutils 工具包内含 5 个独立的程序:canconfig、candump、canecho、cansend、cansequence。这几个程序的功能简述如下: canconfig:用于配置 CAN 总线接口的参数,主要是波特率和模式。 candump...

一个软件工程师的技术笔记 1万+

c#_数字格式化

格式化为一个字符串,其中整数使用了默认格式化,浮点数保留两位小数。占位符来指定需要替换的值。

qq_27953479的博客 1619

【异常】OpenClaw 项目 `fetch failed` 报错问题排查与解决方案Response interrupted: TypeError: fetch failed

针对无超时控制、异常兜底缺失导致的请求中断,封装标准化的安全请求工具,一次性解决超时控制、异常捕获、日志埋点三大问题,全项目替换原生。:将项目运行的 Node.js 版本升级至 18.x 及以上 LTS 版本,使用 Node.js 内置的稳定版。实现的网络请求环节,包括但不限于:第三方开放接口调用、内部服务接口通信、跨域资源请求、外部配置拉取等场景。:针对无法升级 Node.js 版本的存量环境,通过社区稳定兼容包替换原生。类型异常,直接造成业务请求响应中断。第二步:业务代码改造,替换原生。

奶爸的编程之路,也就一周冷个三天 366

ShardingSphere 分库分表避坑:扩容数据迁移时,如何做到“不停机、不丢数据”?

停机:发布公告,凌晨 0 点停止对外服务。洗数据:跑一个巨大的脚本,把旧库数据 Hash 算出新路由,写入新库。改配置:修改代码里的分片规则。重启:祈祷数据没丢,服务正常。这种“刀耕火种”的方式,风险极高,且随着数据量增大,停机时间会变得不可接受。我们需要的是Online Migration (在线迁移)。分库分表扩容不再是“听天由命”的赌博。通过,我们将一次高风险的“运维操作”变成了一个可控的、可视化的“数据流转过程”。方案停机时间复杂度回滚难度传统停机清洗。

BUG猿的博客 882

c# 占位符和常用转义符

(1)这个例子不仅展示了占位符的使用方法,也展示了占位符的输出顺序是按照挖坑顺序来的。(1)转义字符指的就是一个’'+一个特殊的字符,组成了一个具有特殊意义的字符。2.(1)挖了几个坑,就应该填几个坑,如果多填了,没效果,少填了,报异常。\r\n:windows操作系统不认识\n,只认识\r\n,相当于换行。\b:表示一个退格键(相当于删除键),放到字符串的两边没有效果。1.占位符的使用方法:先挖坑,再填坑。(1):取消\在字符串中的转义作用。(2)输出顺序,按照挖坑顺序。\t:表示一个tab键的空格。

qq_42607586的博客 3032

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

c#中的string.Format

在 C# 中,占位符是一种特殊的语法,它可以在字符串中表示一个或多个值。占位符通常用于构建复杂的字符串,例如日志消息、格式化文本和用户界面文本。在 C# 中,占位符通常使用花括号 {} 表示,其中包含了一个或多个参数。

qq_20179331的博客 3974

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C# 第一章『基础』◆第4节:占位符、交换变量、转义符

使用方法string.Format("{0},{1}","匹配0","匹配1"),其中,{0},{1}就是字符串中的占位符,先占住位置。优点减少输出时连接符“+”的使用,避免因丢“+”导致的错误。顺序匹配的顺序按照从左到右,输出的按照{}里的0123...顺序的顺序进行显示。①连接当+号两边有一边是字符串的时候,+号就起到连接的作用。=表示赋值的意思,把等号右边的值赋给等号坐标的变量。①取消\在字符串中的转义作用。注意这里的占位符是用“”包裹着的。+一个特殊的字符,组成了一个具有特殊意义的字符。......

Halcon机器视觉 1272

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C# 数字格式化

int str = 1236; MessageBox.Show("E=" + str.ToString("E")); MessageBox.Show("C=" + str.ToString("C")); MessageBox.Show("D5=" + str.ToString("D5")); MessageBox.Show("F2=" + st

数据库 695

C#学习之旅--Day02-占位符-运算符-数据类型转换-选择语句

1、对字符串中占位使用string.Format,"",即可实现2、{0:c}显示货币10.003、{0:d2}不足两位用0填充4、{0:f1}根据指定精度显示5、{0:p}百分数显示 {0:p0}百分数中保留整数7、转意符。

qq_52439738的博客 897

c#基础知识----占位符

当 WriteLine() 函数有多个参数时,输出第一个参数中的内容,而第二个参数中的内容替换掉第一个参数中对应位置的占位符一起输出。例:static void Main(string[] args) { Console.WriteLine("A:{0},a:{1}",65,97); Console.ReadLine(); }运行结果:A:65,a:97如果第一个参数没有留占位符,

zhanglei1234321的博客 1181

关于C#的占位符

在用正则匹配的时候,[\n\r]是匹配不到空格的,[\n\r]只能匹配换行回车符,而且换行回车符都是占位符,是没有长度的。 要匹配空白符(包括:空格、制表位、换页符等)时用\s,空格和制表位(也就是tab键产生的空白)都是有长度的。 C#在格式化字符串的时候,也有占位符的应用 string.Format("{0},{1}","匹配0","匹配1") 其中,{0},{1}就是字符串中的...

weixin_30377461的博客 656

C# 01.04 占位符

占位符

m0_60538503的博客 1429

C#格式化数字字符串

C#格式化数字字符串

dulang842的专栏 465

C#-字符串连接与占位符

  C#中字符串可用"+"进行连接,组成新的字符串   1 字符串与字符串   string zsName="张三";//zsName 骆驼命名法,忘了命名规则及规范的重新看下之前的009   string str="说大家好";//字符串型的必须加双引号   把这两个字符串拼接成一个,如果没有连接符"+",可以用Console.Write();方法实现;   Console.Write();与Console.WriteLine();这两个方法作用就是向屏幕上显示文字的   代码如下:   s

linjingyg的博客 2996

C# 字符串格式化_C# 字符串格式化整理

一、C# 字符串格式化_C# 字符串格式化整理 使用方式1: xxx.ToString(xxxx) 使用方式2:string.Format(xxxx,xxx) 1、占位符格式化 零占位符:固定位数,不足补充0 数字占位符:最小化数字展示,“##”格式字符串使得值被舍入到小数点前最近的数字,其中零总被舍去。 空格占位符 string.Format("{0,-50}", theObj);//格式化成50个字符,原字符左对齐,不足则补空格 string.Format("{0,50}", theO..

天马3798 2万+

C# 标准数字格式字符串

C# 标准数字格式字符串

鲤籽鲲的博客 1993

C#中泛型<T>(特殊的占位符)的使用详解

泛型(Generic),是将不确定的类型预先定义下来的一种C#高级语法,我们在使用一个类,接口或者方法前,不知道用户将来传什么类型,或者我们写的类,接口或方法相同的代码可以服务不同的类型,就可以定义为泛型。这会大大简化我们的代码结构,同时让后期维护变得容易。泛型很适用于集合,我们常见的泛型集合有:List<T>,Dictionary<K,V>等等(T,K,V就代表不确定的类型,它是一种类型占位符),无一不是利用的泛型这一特性,若没有泛型,我们会多出很多重载方法,以解决类型不同,但是执行逻辑相同的情况。

u011555996的博客 3272

【C#零基础从入门到精通】(五)——C# {n:format} 占位符

在 C# 中,{n:format} 是复合格式化字符串时使用的一种占位符语法,用于将参数插入到字符串中并对其进行格式化显示。

qq_3517289697的博客 545
上一篇: 简述 C# 成员修饰符(Modifier)——从整体到细节全面解析
下一篇: 宠粉福利!移动用户专属薅羊毛攻略,视频会员五选一!
bugcome_com
博客等级 码龄3年 32粉丝 131原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bugcome_com

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值