Sun_Blue_Sky

菩提本无树,明镜亦非台,本来无一物,何处惹尘埃 寻求内心的平静
随笔 - 21, 文章 - 92, 评论 - 75, 阅读 - 10万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

C# 数字格式化字符串详解(收藏)

Posted on   Sun_Blue_Sky  阅读(637)  评论(0编辑  收藏  举报

标准数字格式字符串用于格式化通用数值类型。标准数字格式字符串采用 Axx 的形式,其中 A 是称为格式说明符的字母型字符,xx 是称为精度说明符的可选整数。精度说明符的范围从 0 到 99,并且影响结果中的位数。任何包含一个以上字母字符(包括空白)的数字格式字符串都被解释为自定义数字格式字符串。

发现网上只要你去百度谷歌搜,文章都是千篇一律,互相摘抄,抄袭。其中还有一些错误,所以这些代码,以及我其他文章的代码都是运行之后验证的。

复制代码
代码
using System;


namespace ToStringFormat
{
    
class Program
    {
        
static void Main(string[] args)
        {
           
//按照中国人习惯标准转化
            System.Globalization.CultureInfo Culinfo = System.Globalization.CultureInfo.CreateSpecificCulture("zh-Cn");


           
//【C或c】,数字转换为表示货币金额的字符串。转换由当前 NumberFormatInfo 对象的货币格式信息控制。
            
//精度说明符指示所需的小数位数。如果省略精度说明符,则使用当前 NumberFormatInfo 对象给定的默认货币精度。
            Console.WriteLine("(2.5).ToString('C'):" + (2.5).ToString("C", Culinfo)); //¥2.5
            Console.WriteLine("(2.5).ToString('C2'):" + (2.5).ToString("C2", Culinfo)); //¥2.50
            Console.WriteLine("(2.5).ToString('C3'):" + (2.5).ToString("C3", Culinfo)); //¥2.500
            Console.WriteLine("*************************************************************");
            
//【D 或 d】,只有整型才支持此格式。数字转换为十进制数字 (0-9) 的字符串,如果数字为负,则前面加负号。
            
//精度说明符指示结果字符串中所需的最少数字个数。如果需要的话,则用零填充该数字的左侧,以产生精度说明符给定的数字个数。
            Console.WriteLine("(25).ToString('D'):" + (25).ToString("D", Culinfo)); //25
            Console.WriteLine("(25).ToString('D3'):" + (25).ToString("D3", Culinfo)); //025
            Console.WriteLine("(25).ToString('D4'):" + (25).ToString("D4", Culinfo)); //0025
            Console.WriteLine("(25).ToString('D5'):" + (25).ToString("D5", Culinfo)); //00025
            Console.WriteLine("*************************************************************");
            
//【E 或 e】,数字转换为“-d.ddd…E+ddd”或“-d.ddd…e+ddd”形式的字符串,其中每个“d”表示一个数字 (0-9)。如果该数字为负,则该字符串以减号开头。小数点前总有一个数字。精度说明符指示小数点后所需的位数。如果省略精度说明符,则使用默认值,即小数点后六位数字。
            
//格式说明符的大小写指示在指数前加前缀“E”还是“e”。指数总是由正号或负号以及最少三位数字组成。如果需要,用零填充指数以满足最少三位数字的要求。
            Console.WriteLine("(25000).ToString('E'):" + (25000).ToString("E", Culinfo)); //2.500000E+004
            Console.WriteLine("(25000).ToString('E2'):" + (25000).ToString("E2", Culinfo)); //2.50E+004
            Console.WriteLine("(25000).ToString('E3'):" + (25000).ToString("E3", Culinfo)); //2.500E+004
            Console.WriteLine("(25000).ToString('e'):" + (25000).ToString("e", Culinfo)); //2.500000e+004
            Console.WriteLine("(25000).ToString('e2'):" + (25000).ToString("e2", Culinfo)); //2.50e+004
            Console.WriteLine("(25000).ToString('e3'):" + (25000).ToString("e3", Culinfo)); //2.500e+004
            Console.WriteLine("*************************************************************");
            
//【F 或 f】,数字转换为“-ddd.ddd…”形式的字符串,其中每个“d”表示一个数字 (0-9)。如果该数字为负,则该字符串以减号开头。
            
//精度说明符指示所需的小数位数。如果忽略精度说明符,则默认数值精度由当前 NumberFormatInfo 对象的 NumberDecimalDigits 属性给定。
            Console.WriteLine("(25).ToString('F0'):" + (25).ToString("F0", Culinfo)); //25
            Console.WriteLine("(25).ToString('F1'):" + (25).ToString("F1", Culinfo)); //25.0
            Console.WriteLine("(25).ToString('F2'):" + (25).ToString("F2", Culinfo)); //25.00
            Console.WriteLine("*************************************************************");
           
//【G 或 g】,根据数字类型以及是否存在精度说明符,数字会转换为定点或科学记数法的最紧凑形式。如果精度说明符被省略或为零,则数字的类型决定默认精度,如下表所示。
            
//Byte 或 SByte:3
            
//Int16 或 UInt16:5
            
//Int32 或 UInt32:10
            
//Int64 或 UInt64:19
            
//Single:7
            
//Double:15
            
//Decimal:29
            
//如果用科学记数法表示数字时指数大于 -5 而且小于精度说明符,则使用定点表示法;否则使用科学记数法。如果要求有小数点,并且忽略尾部零,则结果包含小数点。如果精度说明符存在,并且结果的有效数字位数超过指定精度,则通过舍入删除多余的尾部数字。
            
//如果数字是 Decimal 并且省略精度说明符,上述规则存在一个例外。在这种情况下总使用定点表示法并保留尾部零。
            
//使用科学记数法时,如果格式说明符是“G”,结果的指数带前缀“E”;如果格式说明符是“g”,结果的指数带前缀“e”。
            Console.WriteLine("(2.5).ToString('G'):" + (250).ToString("G", Culinfo)); //250
            Console.WriteLine("(2.5).ToString('G1'):" + (250).ToString("G1", Culinfo)); //3E+02
            Console.WriteLine("(2.5).ToString('G2'):" + (250).ToString("G2", Culinfo)); //2.5E+02
            Console.WriteLine("(2.5).ToString('G3'):" + (250).ToString("G3", Culinfo)); //250
            Console.WriteLine("*************************************************************");
           
//【N 或 n】,数字转换为“-d,ddd,ddd.ddd…”形式的字符串,其中“-”表示负数符号(如果需要),“d”表示数字 (0-9),“,”表示数字组之间的千位分隔符,“.”表示小数点符号。实际的负数模式、数字组大小、千位分隔符以及小数分隔符分别由当前 NumberFormatInfo 对象的 NumberNegativePattern、NumberGroupSizes、NumberGroupSeparator 和 NumberDecimalSeparator 属性指定。
            
//精度说明符指示所需的小数位数。如果忽略精度说明符,则默认数值精度由当前 NumberFormatInfo 对象的 NumberDecimalDigits 属性给定。
            Console.WriteLine("(250000).ToString('N'):" + (250000).ToString("N", Culinfo)); //250,000.00
            Console.WriteLine("(250000).ToString('N1'):" + (250000).ToString("N1", Culinfo)); //250,000.0
            Console.WriteLine("(250000).ToString('N3'):" + (250000).ToString("N3", Culinfo)); //250,000.000
            Console.WriteLine("*************************************************************");
            
//【X 或 x】只有整型才支持此格式。数字转换为十六进制数字的字符串。格式说明符的大小写指示对大于 9 的十六进制数字使用大写字符还是小写字符。例如,使用“X”产生“ABCDEF”,使用“x”产生“abcdef”。
            
//精度说明符指示结果字符串中所需的最少数字个数。如果需要的话,则用零填充该数字的左侧,以产生精度说明符给定的数字个数。
            Console.WriteLine("(25).ToString('X'):" + (25).ToString("X", Culinfo));//19
            Console.WriteLine("(25).ToString('X4'):" + (25).ToString("X4", Culinfo));//19
            Console.WriteLine("(25).ToString('X8'):" + (25).ToString("X8", Culinfo));//19
            Console.WriteLine("*************************************************************");

           
//【P 或 p】 按照 NumberFormatInfo..::.PercentNegativePattern 属性(若数字为负)或 NumberFormatInfo..::.PercentPositivePattern 属性(若数字为正)的定义,将数字转换为一个表示百分比的字符串。已转换的数字乘以 100 以表示为百分比。
            
//精度说明符指示所需的小数位数。如果省略精度说明符,则使用当前 NumberFormatInfo 对象给定的默认数字精度。
            Console.WriteLine("(0.025).ToString('P'):" + (0.025).ToString("P", Culinfo));//2.50%
            Console.WriteLine("(0.025).ToString('P1'):" + (0.025).ToString("P1", Culinfo));//2.5%
            Console.WriteLine("(0.025).ToString('P2'):" + (0.025).ToString("P2", Culinfo));//2.50%
            Console.WriteLine("(0.025).ToString('P3'):" + (0.025).ToString("P3", Culinfo));//2.500%
            Console.WriteLine("*************************************************************");
            
//【R 或 r】只有 Single 和 Double 类型支持此格式。往返过程说明符保证转换为字符串的数值再次被分析为相同的数值。使用此说明符格式化数值时,首先使用常规格式对其进行测试:Double 使用 15 位精度,Single 使用 7 位精度。如果此值被成功地分析回相同的数值,则使用常规格式说明符对其进行格式化。但是,如果此值未被成功地分析为相同数值,则它这样格式化:Double 使用 17 位精度,Single 使用 9 位精度。
            
//尽管可以存在精度说明符,但它将被忽略。使用此说明符时,往返过程优先于精度。
            Console.WriteLine("(25.00).ToString('r'):" + (25.00).ToString("r", Culinfo)); //25
            Console.WriteLine("(25.00).ToString('r1'):" + (25.00).ToString("r1", Culinfo)); //25
            Console.WriteLine("(25.00).ToString('r2'):" + (25.00).ToString("r2", Culinfo)); //25


            Console.ReadKey();
        }
    }
}

复制代码

 

 

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示