C#格式化输出

C#提供了多个格式化输出的方法,使得我们在灵活且可读的方法构建字符串;主要的格式化方法包括:String.Format方法、字符串插值,以及使用符合格式字符串与Console.WriteLint或Console.Write函数。

String.Format方法

string.Format是一种传统且强大的方法,用于创建格式化的字符串。它可以接受模板字符串和一系列参数,然后根据模板中的占位符{N,M}来插入这些参数;然而这里的N是从0开始的整数,表示参数的位置;M是可选的宽度指定器,用来定义输出字段的最小宽度;:formatString则是可选的格式化字符串,用于进一步制定输出。

重载
方式描述
[Format(IFormatProvider, String, Object]))将字符串中的格式项替换位指定数组中相对对象的字符串表示形式。参数提供区域型特定的格式设置信息。
Format(IFormatProvider, String, Object, Object, Object)将字符串中的格式项替换位三个指定的字符串表示形式。参数提供区域性特定的格式设置信息。
Format(String, Object, Object, Object)将字符串中的格式项替换位三个指定对象的字符串表示形式。
Format(IFormatProvider, String, Object, Object)将字符串中的格式项替换位两个指定对象的字符串表示形式。参数提供区域性特定的格式设置信息。
[Format(IFormatProvider, String, Object]))将字符串中的格式项替换为指定数组中相应对象的字符串表示形式。 参数提供区域性特定的格式设置信息。将字符串中的格式项替换位两个指定对象的字符串表示形式。
Format(IFormatProvider, CompositeFormat, ReadOnlySpan)))将字符串中的格式项替换为三个指定对象的字符串表示形式。 参数提供区域性特定的格式设置信息。将 CompositeFormat 中的格式或项替换为指定格式中相应对象的字符串表示形式。
Format(String, Object, Object, Object)Format(IFormatProvider, String, Object)将字符串中的格式项替换为三个指定对象的字符串表示形式。将指定字符串中的格式项或向替换为相应对象的字符串表示形式。参数提供区域性特定的格式设置信息。
Format(IFormatProvider, String, Object, Object)[Format(String, Object]))将字符串中的格式项替换为两个指定对象的字符串表示形式。 参数提供区域性特定的格式设置信息。将指定字符串中的格式向替换为指定数组中相应的字符串表示形式。
Format(String, Object, Object)Format(String, Object)将字符串中的一个或多个格式项替换为指定对象的字符串表示形式。
[Format(IFormatProvider, CompositeFormat, Object]))将CompositeFormat 中的格式项或项替换为指定格式中相应对象的字符串表示形式。
Format(IFormatProvider, CompositeFormat, TArg0, TArg1, TArg2)将CompositeFormat 中的格式项或项替换为指定格式中相应对象的字符串表示形式。
Format(IFormatProvider, CompositeFormat, TArg0, TArg1)将CompositeFormat 中的格式项或项替换为指定格式中相应对象的字符串表示形式。
Format(IFormatProvider, CompositeFormat, TArg0)将CompositeFormat 中的格式项或项替换为指定格式中相应对象的字符串表示形式。

详细介绍

String.Format 方法 (System) | Microsoft Learn)

Format方式

System.String.Format 方法 - .NET | Microsoft Learn

语法于基本用法

示例:

string formattedString = String.Format("这是一个 {0} 示例。", "格式化");

{0} 是一个占位符,它会被传递给 String.Format 方法的第一个参数所替代。如果需要更多参数,则可以在格式字符串中添加更多的占位符 {1}, {2} 等等,并在后面依次提供相应的参数值。

int age = 30;
string name = "Alice";
string message = String.Format("{0} is {1} years old.", name, age);
Console.WriteLine(message); // 输出:Alice is 30 years old.

格式项的组成部分

每个格式项由三部分组成:索引、宽度(可选)、格式字符串(可选)。格式项的一般形式是 {N[,M][:formatString]},其中:

  • N 是从零开始编号的参数索引。

  • M 是可选的最小宽度说明符;如果它是负数,则表示左对齐。

  • :formatString 是可选的具体格式化规则,如货币 (C)、固定点 (F) 或者日期 (d) 等。

decimal price = 45.67m;
string formattedPrice = String.Format("The price is {0:C}.", price);
Console.WriteLine(formattedPrice); // 如果当前文化设置为 en-US,则输出 The price is $45.67.

这里 {0:C} 表示第一个参数应该被格式化为带有货币符号的金额。

常见的数据类型格式化

对于不同类型的数据,String.Format 提供了不同的格式化选项:

  • 整数:可以使用 D 来确保数字至少显示一定数量的位数,比如 {0:D4} 将确保四位数的宽度。

  • 浮点数:可以使用 F 来指定小数点后的位数,或者使用 E 表示科学计数法。

  • 百分比:可以通过 P 来表示百分比,并自动乘以 100 并附加 % 符号。

  • 日期时间:可以使用 d 表示短日期,t 表示短时间,而 f 结合两者。

  • 十六进制:可以使用 X 来输出整数的十六进制表示。

  • 自定义格式化:还可以通过指定更复杂的格式字符串来实现特定需求,如 {0:000} 强制显示三位数,不足部分用零填充。

格式化一个日期和时间:

DateTime now = DateTime.Now;
string formattedDateTime = String.Format("Today's date and time is {0:f}.", now);
Console.WriteLine(formattedDateTime); // 输出 Today's date and time is Wednesday, January 10, 2025 10:16 AM.
区域性和文化设置的影响

当涉及到货币符号、日期格式等方面时,String.Format 的输出结果会受到应用程序区域性设置的影响。这意味着同样的代码在不同的机器上可能会产生不同的输出结果。因此,在开发国际化应用时,应当考虑如何正确处理这些差异。例如,可以通过传递 CultureInfo 对象给 String.Format 或者其他相关方法来确保输出符合目标用户的期望。

var culture = new System.Globalization.CultureInfo("fr-FR");
string localizedMessage = String.Format(culture, "{0:C}", 1234.56m);
Console.WriteLine(localizedMessage); // 在 fr-FR 文化下,输出 1 234,56 €

使用标志、宽度和精度

除了简单的格式化外,还可以利用标志、宽度和精度来进一步控制输出格式。例如,使用正负号前缀 (+-) 可以为数值添加符号,使用零填充 (0) 可以保证数字的长度,使用逗号分隔符 (,) 可以让大数更易读。此外,精度可以用来限制浮点数的小数位数。

// 正负号前缀
Console.WriteLine(String.Format("{0:+0;-0;0}", -123)); // 输出 -123
Console.WriteLine(String.Format("{0:+0;-0;0}", 123));  // 输出 +123

// 零填充
Console.WriteLine(String.Format("{0:D6}", 123));       // 输出 000123

// 逗号分隔符
Console.WriteLine(String.Format("{0:N}", 1234567.89)); // 输出 1,234,567.89

// 浮点数精度
Console.WriteLine(String.Format("{0:F2}", 123.456789)); // 输出 123.46

参数索引引用

如果重复使用同一个参数多次,这时可以明确地指定参数索引,而不是依赖于它们出现的位置顺序。

string greeting = "Hello";
string personalizedGreeting = String.Format("{0}, {0}!", greeting);
Console.WriteLine(personalizedGreeting); // 输出 Hello, Hello!

String.Format 是一种非常灵活且强大的方法,适用于多种场景下的字符串构建任务。掌握它的基本用法以及深入了解其各个组成部分可以帮助我们写出更加清晰、简洁并且易于维护的代码。无论是简单的文本拼接还是复杂的数值展示,String.Format 都提供了丰富的功能来满足不同的需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/953443.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

记一次学习skynet中的C/Lua接口编程解析protobuf过程

1.引言 最近在学习skynet过程中发现在网络收发数据的过程中数据都是裸奔,就想加入一种数据序列化方式,json、xml简单好用,但我就是不想用,于是就想到了protobuf,对于protobuf C/C的使用个人感觉有点重,正好…

vue2修改表单只提交被修改的数据的字段传给后端接口

效果: 步骤一、 vue2修改表单提交的时候,只将修改的数据的字段传给后端接口,没有修改得数据不传参给接口。 在 data 对象中添加一个新的属性,用于存储初始表单数据的副本,与当前表单数据进行比较,找出哪些…

大数据运维管理体系的搭建

[〇]关于本文 本文将介绍一种大型集群的运维管理体系 【大型集群的管理大于解决问题】意在大规模数据集群的运维过程中,系统化、规范化的管理措施比单纯的故障处理更为关键。通过有效的管理,可以预防问题的发生、提升系统的稳定性和性能,从而…

如何使用开源图床程序EasyImage搭建一个私有图库并实现远程传图

前言:在输出内容时,一张高质量的图片往往能够瞬间吸引读者的眼球,提升内容的整体价值。然而,对于许多博主、站长和自媒体人来说,找到一个稳定且免费的图床服务却成了头疼的问题。很多图床要么不稳定,导致图…

Java Web开发进阶——错误处理与日志管理

错误处理和日志管理是任何生产环境中不可或缺的一部分。在 Spring Boot 中,合理的错误处理机制不仅能够提升用户体验,还能帮助开发者快速定位问题;而有效的日志管理能够帮助团队监控应用运行状态,及时发现和解决问题。 1. 常见错误…

二分查找算法——山脉数组的峰顶索引

一.题目描述 852. 山脉数组的峰顶索引 - 力扣(LeetCode) 二.题目解析 题目给了我们一个山脉数组,山脉数组的值分布就如下面的样子: 然后我们只需要返回数组的峰值元素的下标即可。 三.算法原理 1.暴力解法 因为题目明确说明…

2. Doris数据导入与导出

一. Doris数据导入 导入方式使用场景支持的文件格式导入模式Stream Load导入本地文件或者应用程序写入csv、json、parquet、orc同步Broker Load从对象存储、HDFS等导入csv、json、parquet、orc异步Routine Load从kakfa实时导入csv、json异步 1. Stream Load 基本原理 在使用…

30_Redis哨兵模式

在Redis主从复制模式中,因为系统不具备自动恢复的功能,所以当主服务器(master)宕机后,需要手动把一台从服务器(slave)切换为主服务器。在这个过程中,不仅需要人为干预,而且还会造成一段时间内服务器处于不可用状态,同时数据安全性也得不到保障,因此主从模式的可用性…

把PX4及子仓库添加到自己的gitee

导入主仓库 此处以导入PX4为例 先用gitee导入仓库然后clone gitee仓库先checkout到v1.11,git submodule update --init --recursive,确保可以make之后再新建branchgit checkout -b my1.11.0按照提示连接到origin改代码然后三件套就行了git add ./*git …

解决:ubuntu22.04中IsaacGymEnv保存视频报错的问题

1. IsaacGymEnvs项目介绍 IsaacGymEnvs:基于NVIDIA Isaac Gym的高效机器人训练环境 IsaacGymEnvs 是一个基于 NVIDIA Isaac Gym 的开源 Python 环境库,专为机器人训练提供高效的仿真环境。Isaac Gym 是由 NVIDIA 开发的一个高性能物理仿真引擎&#xf…

ELK日志分析实战宝典之ElasticSearch从入门到服务器部署与应用

目录 ELK工作原理展示图 一、ElasticSearch介绍(数据搜索和分析) 1.1、特点 1.2、数据组织方式 1.3、特点和优势 1.3.1、分布式架构 1.3.2、强大的搜索功能 1.3.3、数据处理与分析 1.3.4、多数据类型支持 1.3.5、易用性与生态系统 1.3.6、高性…

android 自定义SwitchCompat,Radiobutton,SeekBar样式

纯代码的笔记记录。 自定义SwitchCompat按钮的样式 先自定义中间的圆球switch_thumb_bg.xml <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com/apk/res/android"android:shape"oval&q…

【学习路线】Python自动化运维 详细知识点学习路径(附学习资源)

学习本路线内容之前&#xff0c;请先学习Python的基础知识 其他路线&#xff1a; Python基础 >> Python进阶 >> Python爬虫 >> Python数据分析&#xff08;数据科学&#xff09; >> Python 算法&#xff08;人工智能&#xff09; >> Pyth…

【URDF和SDF区别】

URDF&#xff08;Unified Robot Description Format&#xff0c;统一机器人描述格式&#xff09;和SDF&#xff08;Simulation Description Format&#xff0c;仿真描述格式&#xff09;是两种常用的机器人和仿真环境建模格式。虽然它们在许多方面有相似之处&#xff0c;但也存…

【翻译】2025年华数杯国际赛数学建模题目+翻译pdf自取

保存至本地网盘 链接&#xff1a;https://pan.quark.cn/s/f82a1fa7ed87 提取码&#xff1a;6UUw 2025年“华数杯”国际大学生数学建模竞赛比赛时间于2025年1月11日&#xff08;周六&#xff09;06:00开始&#xff0c;至1月15日&#xff08;周三&#xff09;09:00结束&#xff…

springboot vue uniapp 仿小红书 1:1 还原 (含源码演示)

线上预览: 移动端 http://8.146.211.120:8081/ 管理端 http://8.146.211.120:8088/ 小红书凭借优秀的产品体验 和超高人气 目前成为笔记类产品佼佼者 此项目将详细介绍如何使用Vue.js和Spring Boot 集合uniapp 开发一个仿小红书应用&#xff0c;凭借uniapp 可以在h5 小程序 app…

VS2015 + OpenCV + OnnxRuntime-Cpp + YOLOv8 部署

近期有个工作需求是进行 YOLOv8 模型的 C 部署&#xff0c;部署环境如下 系统&#xff1a;WindowsIDE&#xff1a;VS2015语言&#xff1a;COpenCV 4.5.0OnnxRuntime 1.15.1 0. 预训练模型保存为 .onnx 格式 假设已经有使用 ultralytics 库训练并保存为 .pt 格式的 YOLOv8 模型…

css盒子水平垂直居中

目录 1采用flex弹性布局&#xff1a; 2子绝父相margin&#xff1a;负值&#xff1a; 3.子绝父相margin:auto&#xff1a; 4子绝父相transform&#xff1a; 5通过伪元素 6table布局 7grid弹性布局 文字 水平垂直居中链接&#xff1a;文字水平垂直居中-CSDN博客 以下为盒子…

qt QPainter setViewport setWindow viewport window

使用qt版本5.15.2 引入viewport和window目的是用于实现QPainter画出来的内容随着窗体伸缩与不伸缩两种情况&#xff0c;以及让QPainter在widget上指定的区域(viewport)进行绘制/渲染&#xff08;分别对应下方demo1&#xff0c;demo2&#xff0c;demo3&#xff09;。 setViewpo…

深度学习-算法优化与宇宙能量梯度分布

在当今迅速发展的科技世界中&#xff0c;算法优化和能量分布问题已成为研究的热点&#xff0c;尤其是在人工智能、机器学习和物理科学领域。算法优化通常涉及提高计算效率和降低资源消耗&#xff0c;而宇宙能量梯度分布则涉及宇宙中能量的分布和流动方式。两者看似是完全不同的…