当前位置: 首页 > article >正文

C#格式化输出

上两期:

C#格式化输出-CSDN博客

C#格式化输出-CSDN博客

Console.WriteLine和Console.Write

Console.WriteLineConsole.Write 是两个用于向控制台输出信息的方法,它们都属于 System.Console 类。尽管这两个方法的功能相似,但它们之间存在一些关键的区别,这些区别影响了它们的使用场景和行为。

Console.WriteLine方法:

Console.WriteLine方法用于将指定的数据(字符串和数值或其他对象)及其后的唤醒符写入到控制台窗口,这意味着每次在调用Console.WriteLine之后,光标会自动移到到下一行的开始位置,为接下来的输出准备好所需空间。因此当需要连续调用Console.Writeline方式时,每一行输出都会出现在新的一行上面。

Console.Write方法:

Console.Write方法同样可以接受各种类型的参数,并将它们转换长字符串后输出到控制台,但时它不会再输出结束之后添加换行符。如需要换行就必须手动添加换行符(\r\n)。

格式化输出

除了基本的输出功能外,Console.WriteLineConsole.Write 都支持通过复合格式字符串来进行复杂的格式化操作。您可以指定占位符 {} 来表示待插入的参数,并且可以在大括号内定义格式化选项,如对齐方式、宽度限制以及特定类型的格式化模式。

double value = 123.456;
Console.WriteLine("Formatted number: {0:N2}", value); // 输出带两位小数的数字
Console.Write("Left aligned: {0,-10} | Right aligned: {1,10}\n", "left", "right");

性能考虑

理论上讲,由于 Console.WriteLine 每次调用时都需要处理换行符,因此它可能会比 Console.Write 略微消耗更多的资源。然而,在大多数实际应用中,这种差异是可以忽略不计的,除非是在极端情况下频繁调用这些方法。因此,选择哪个方法更多取决于具体的输出需求而非性能考量。

结论

Console.WriteLineConsole.Write 的主要区别在于是否自动添加换行符以及它们各自适用的不同输出场景。

标准与自定义是说明符

对于数字类型可以使用多种标准格式说明回复来改变其显示形式,如货币(c)、科学计数法(E)、固定点(F)等;而对于日期时间类型,则有短时期(d)、长日期(D)等不同格式;还可以通过自定义格式字符串来满足更为复杂的需要:

  • 数字格式化:

    • 货币:2.5.ToString("C") 结果为 2.50

    • 十进制数:25.ToString("D5") 结果为 00025

    • 科学型:25000.ToString("E") 结果为 2.500000E+005

    • 固定点:25.ToString("F2") 结果为 25.00

    • 常规:2.5.ToString("G") 结果为 2.5

    • 数字:2500000.ToString("N") 结果为 2,500,000.00

    • 十六进制:255.ToString("X") 结果为 FF

  • 日期时间格式化:

    • 短日期:DateTime.Now.ToString("d")

    • 长日期:DateTime.Now.ToString("D")

    • 完整日期和时间:DateTime.Now.ToString("f")

    • RFC1123 日期字符串:DateTime.Now.ToString("r")

    • 可排序日期字符串:DateTime.Now.ToString("s")

标准格式说明符

标准格式说明符时由单个字母字符组成的简单字符串,用于指定常见的数值或日期时间格式。例如:“c”表示货币格式,“D”表示十进制整数格式,而“F”则表示固定点数格式。

每种说明符都有其默认的行为,并且可以根据据需要通过附加精度说明符来调整。

double value = 1234.5678;
Console.WriteLine(value.ToString("C")); // 货币格式,默认为当前文化设置下的货币符号
Console.WriteLine(value.ToString("F2")); // 固定点数格式,保留两位小数

这里展示了如何利用标准格式说明符快速地将数值转换成符合预期格式的字符串表示形式。对于日期时间类型的数据,也有类似的标准格式说明符,如 "d" 表示短日期模式,"t" 表示短时间模式等。

自定义格式说明符

当标准格式说明符无法满足特定需要时,我们将可以选择创建自定义格式说明符;自定义说明符允许更加精细地控制输出格式,包括但不限于数字占位符("0"和"#")、分隔符("."和",")、百分比符号("%")以及其他特殊符号,因此,还可以定义多个部分以分别处理正数、负数和零值的不用显示规则。

符号描述
"0"作为零占位符,即使没有对应的数字也会显示零。
"#"仅当由实际数字时才会显示,否则为空。
"."用于设置小数点的位置。
","既可以作为分割符也可以用来缩放数值。
"%"将数值乘以100并添加百分号。
"‰"将数值乘以1000并添加千分号
多部分格式

可以使用分号 ";" 来分隔不同的格式部分,以便根据数值的正负性选择适当的格式化方式。

string format = "#,##0.00;(#,##0.00);-";
Console.WriteLine((-1234.56).ToString(format)); // 输出: (1,234.56)

例子中,第一部分用于正数,第二部分用于负数(带括号),第三部分则专门针对零值。

实现自定义格式提供程序

如果现有的标准和自定义格式说明符依然不能覆盖现有问题,则可以通过实现IFormatProviderICustomFormatter接口来自动红衣整个格式化过程。

public class CustomNumberFormatter : IFormatProvider, ICustomFormatter {
    public object GetFormat(Type formatType) {
        if (formatType == typeof(ICustomFormatter))
            return this;
        else
            return null;
    }

    public string Format(string format, object arg, IFormatProvider formatProvider) {
        // 实现具体的格式化逻辑...
        return "formatted string";
    }
}

通过这种方式,不仅可以扩展 C# 内置的格式化能力,还能够确保应用程序中的数据始终按照一致且正确的格式呈现给用户。


http://www.kler.cn/a/502368.html

相关文章:

  • pandas与sql对应关系【帮助sql使用者快速上手pandas】
  • 快速上手 INFINI Console 的 TopN 指标功能
  • TypeScript Jest 单元测试 搭建
  • 2.Numpy练习(1)
  • 计算机网络之---VPN与隧道协议
  • 一路相伴,非凸科技助力第49届ICPC亚洲区决赛
  • 世优波塔数字人 AI 大屏再升级:让智能展厅讲解触手可及
  • 【Apache Doris】周FAQ集锦:第 29 期
  • VS Code 中,GitLens 和 Git Graph
  • 【大数据】Apache Superset:可视化开源架构
  • 如何更轻松的对React refs 的理解?都有哪些应用场景?
  • [Qt] 窗口 | 菜单栏MenuBar
  • springboot基于安卓的反诈APP
  • 代码随想录算法【Day20】
  • 【yum 无法使用】centos7 配置阿里云的 CentOS 镜像源
  • 解析OVN架构及其在OpenStack中的集成
  • 【前端】自学基础算法 -- 20.图的深度优先搜索
  • 【Uniapp-Vue3】pages.json页面路由globalStyle的属性
  • C++开源项目 VLC 源代码的交叉编译以及库的裁剪方法详解
  • MySQL(高级特性篇) 01 章——Linux下MySQL的安装与使用
  • 平均(2023-省赛-贪心)
  • MySql怎么查看连接池是否打满
  • 风水算命系统架构与功能分析
  • Matlab一些使用技巧
  • JSON.stringify(res,null,2)的含义
  • 如何用JavaScript实现轮播图