C# Tostring 格式化输出字符串全解

格式化数值:有时,我们可能需要将数值以一定的格式来呈现,就需要对数值进行格式化。我们使用格式字符串指定格式。格式字符串采用以下形式:Axx,其中 A 为格式说明符,指定格式化类型,xx 为精度说明符,控制格式化输出的有效位数或小数位数。

格式说明符
说明
示例
输出
C
货币
2.5.ToString("C")
¥2.50
D
十进制数
25.ToString("D5")
00025
E
科学型
25000.ToString("E")
2.500000E+005
F
固定点
25.ToString("F2")
25.00
G
常规
2.5.ToString("G")
2.5
N
数字
2500000.ToString("N")
2,500,000.00
X
十六进制
255.ToString("X")
FF

 

C#的String.Format格式化举例
stringstr1 =string.Format("{0:N1}",56789);               //result: 56,789.0
stringstr2 =string.Format("{0:N2}",56789);               //result: 56,789.00
stringstr3 =string.Format("{0:N3}",56789);               //result: 56,789.000
stringstr8 =string.Format("{0:F1}",56789);               //result: 56789.0
stringstr9 =string.Format("{0:F2}",56789);               //result: 56789.00
stringstr11 =(56789 / 100.0).ToString("#.##");           //result: 567.89
stringstr12 =(56789 / 100).ToString("#.##");             //result: 567

C 或 c
货币
Console.Write("{0:C}", 2.5);  //$2.50
Console.Write("{0:C}", -2.5); //($2.50)

D 或 d
十进制数
Console.Write("{0:D5}", 25);  //00025
 
E 或 e
科学型
Console.Write("{0:E}", 250000);  //2.500000E+005
 
F 或 f
固定点
Console.Write("{0:F2}", 25);  //25.00
Console.Write("{0:F0}", 25);  //25
 
G 或 g
常规
Console.Write("{0:G}", 2.5);  //2.5
 
N 或 n
数字
Console.Write("{0:N}", 2500000);  //2,500,000.00
 
X 或 x
十六进制
Console.Write("{0:X}", 250);  //FA
Console.Write("{0:X}", 0xffff);  //FFFF

 

 

 

C# 数字格式化字符串详解2010-07-03 08:59 A.M.标准数字格式字符串用于格式化通用数值类型。标准数字格式字符串采用 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();
        }
    }
}

 




formatCode 是可选的格式化代码字符串。(详细内容请搜索“格式化字符串”查看) 
必须用“{”和“}”将格式与其他字符分开。如果恰好在格式中也要使用大括号,可以用连续的两个大括号表示一个大括号,即: “{{”或者“}}”。

常用格式举例:

(1) int i=12345;

this.textBox1.Text=i.ToString();

//结果 12345(this指当前对象,或叫当前类的实例)

this.textBox2.Text=i.ToString("d8");

//结果 00012345

(2) int i=123;

double j=123.45;

string s1=string.Format("the value is {0,7:d}",i);

string s2=string.Format("the value is {0,7:f3}",j);

this.textBox1.Text=s1 ;

//结果 the value is 123

this.textBox2.Text=s2;

//结果 the value is 123.450

(3)double i=12345.6789;

this.textBox1.Text=i.ToString("f2"); //结果 12345.68

this.textBox2.Text=i.ToString("f6");

//结果 12345.678900

(4)double i=12345.6789;

this.textBox1.Text=i.ToString("n"); //结果 12,345.68

this.textBox2.Text=i.ToString(“n4”); //结果 12,345.6789

(5)double i=0.126;

string s=string.Format("the value is {0:p}",i);

this.textBox1.Text=i.ToString("p"); //结果 12.6%

this.textBox2.Text=s; //结果 the value is 12.6%

(6) DateTime dt =new DateTime(2003,5,25);

this.textBox1.Text=dt.ToString("yy.M.d");

//结果 03.5.25

this.textBox2.Text=dt.ToString(“yyyy年M月”);

//结果 2003年5月

Convert.ToDateTime("2005/12/22 22:22:22").ToString("yyyy/MM/dd HH:mm:ss")
"2005/12/22 22:22:22"

(7) int i=123;

double j=123.45;

string s=string.Format("i:{0,-7},j:{1,7}",i,j);

//-7表示左对齐,占7位

this.textBox1.Text=s ;

//结果i:123 ,j: 123.45


DateTime.ToString()用法详解

我们经常会遇到对时间进行转换,达到不同的显示效果,默认格式为:2006-6-6 14:33:34 
如果要换成成200606,06-2006,2006-6-6或更多的格式该怎么办呢?
这里将要用到:DateTime.ToString的方法(String, IFormatProvider)
示例:
using System;
using System.Globalization;
String format="D";
DateTime date=DataTime.Now;
Response.Write(date.ToString(format, DateTimeFormatInfo.InvariantInfo));
结果输出
Thursday, June 16, 2006

在这里列出了参数format格式详细用法
=======================
格式字符 关联属性/说明 
d ShortDatePattern 
D LongDatePattern 
f 完整日期和时间(长日期和短时间) 
F FullDateTimePattern(长日期和长时间) 
g 常规(短日期和短时间) 
G 常规(短日期和长时间) 
m、M MonthDayPattern 
r、R RFC1123Pattern 
s 使用当地时间的 SortableDateTimePattern(基于 ISO 8601) 
t ShortTimePattern 
T LongTimePattern 
u UniversalSortableDateTimePattern 用于显示通用时间的格式 
U 使用通用时间的完整日期和时间(长日期和长时间) 
y、Y YearMonthPattern

下表列出了可被合并以构造自定义模式的模式
========================================
这些模式是区分大小写的;例如,识别“MM”,但不识别“mm”。如果自定义模式包含空白字符或用单引号括起来的字符,则输出字符串页也将包含这些字符。未定义为格式模式的一部分或未定义为格式字符的字符按其原义复制。

格式模式 说明 :
d 月中的某一天。一位数的日期没有前导零。 
dd 月中的某一天。一位数的日期有一个前导零。 
ddd 周中某天的缩写名称,在 AbbreviatedDayNames 中定义。 
dddd 周中某天的完整名称,在 DayNames 中定义。 
M 月份数字。一位数的月份没有前导零。 
MM 月份数字。一位数的月份有一个前导零。 
MMM 月份的缩写名称,在 AbbreviatedMonthNames 中定义。 
MMMM 月份的完整名称,在 MonthNames 中定义。 
y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。 
yy 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。 
yyyy 包括纪元的四位数的年份。 
gg 时期或纪元。如果要设置格式的日期不具有关联的时期或纪元字符串,则忽略该模式。 
h 12 小时制的小时。一位数的小时数没有前导零。 
hh 12 小时制的小时。一位数的小时数有前导零。 
H 24 小时制的小时。一位数的小时数没有前导零。 
HH 24 小时制的小时。一位数的小时数有前导零。 
m 分钟。一位数的分钟数没有前导零。 
mm 分钟。一位数的分钟数有一个前导零。 
s 秒。一位数的秒数没有前导零。 
ss 秒。一位数的秒数有一个前导零。 
f 秒的小数精度为一位。其余数字被截断。 
ff 秒的小数精度为两位。其余数字被截断。 
fff 秒的小数精度为三位。其余数字被截断。 
ffff 秒的小数精度为四位。其余数字被截断。 
fffff 秒的小数精度为五位。其余数字被截断。 
ffffff 秒的小数精度为六位。其余数字被截断。 
fffffff 秒的小数精度为七位。其余数字被截断。 
t 在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项的第一个字符(如果存在)。 
tt 在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项(如果存在)。 
z 时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数没有前导零。例如,太平洋标准时间是“-8”。 
zz 时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数有前导零。例如,太平洋标准时间是“-08”。 
zzz 完整时区偏移量(“+”或“-”后面跟有小时和分钟)。一位数的小时数和分钟数有前导零。例如,太平洋标准时间是“-08:00”。 
: 在 TimeSeparator 中定义的默认时间分隔符。 
/ 在 DateSeparator 中定义的默认日期分隔符。 
% c 其中 c 是格式模式(如果单独使用)。如果格式模式与原义字符或其他格式模式合并,则可以省略“%”字符。 
" c 其中 c 是任意字符。照原义显示字符。若要显示反斜杠字符,请使用“""”。

只有上面第二个表中列出的格式模式才能用于创建自定义模式;在第一个表中列出的标准格式字符不能用于创建自定义模式。自定义模式的长度至少为两个字符;例如,

DateTime.ToString( "d") 返回 DateTime 值;“d”是标准短日期模式。 
DateTime.ToString( "%d") 返回月中的某天;“%d”是自定义模式。 
DateTime.ToString( "d ") 返回后面跟有一个空白字符的月中的某天;“d”是自定义模式。

比较方便的是,上面的参数可以随意组合,并且不会出错,多试试,肯定会找到你要的时间格式
如要得到2005年06月 这样格式的时间
可以这样写:
date.ToString("yyyy年MM月", DateTimeFormatInfo.InvariantInfo)
如此类推.

下面列出一些Asp.NET中具体的日期格式化用法:
============================================
1.绑定时格式化日期方法:

2.数据控件如DataGrid/DataList等的件格式化日期方法: 
e.Item.Cell[0].Text = Convert.ToDateTime(e.Item.Cell[0].Text).ToShortDateString();

3.用String类转换日期显示格式: 
String.Format( "yyyy-MM-dd ",yourDateTime);

4.用Convert方法转换日期显示格式: 
Convert.ToDateTime("2005-8-23").ToString

("yyMMdd",System.Globalization.DateTimeFormatInfo.InvariantInfo); //支持繁体数据库

5.直接用ToString方法转换日期显示格式: 
DateTime.Now.ToString("yyyyMMddhhmmss"); 
DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss")

6.只显示年月 
DataBinder.Eval(Container.DataItem,"starttime","{0:yyyy-M}")

7.显示时间所有部分,包括:年月日时分秒 
DataFormatString='{0:yyyy-MM-dd HH24:mm:ss}'>


用DateTime.ToString(string format)输出不同格式的日期

DateTime.ToString()函数有四个重载。一般用得多的就是不带参数的那个了。殊不知,DateTime.ToString(string format)功能更强大,能输出不同格式的日期。以下把一些情况罗列出来,供大家参考。有些在MSDN上有的就没有列出来了。

1.         y代表年份,注意是小写的y,大写的Y并不代表年份。

2.         M表示月份。

3.         d表示日期,注意D并不代表什么。

4.         h或H表示小时,h用的是12小时制,H用的是24小时制。

5.         m表示分钟。

6.         s表示秒。注意S并不代表什么。

格式
输出
示例

y
7
string yy = DateTime.Now.ToString("y-MM")

yy="7-05"

yy
07
string yy = DateTime.Now.ToString("yy-MM")

yy="07-05"

yyy或更多的y
1984
string yy = DateTime.Now.ToString("yyyy");

yy="2007"

M
5.
string mon = DateTime.Parse("1984-05-09")ToString("yyyy-M")

mon = "1984-5"

MM
05. 
string mon = DateTime.Parse("1984-05-09")ToString("MM")

mon = "05"

MMM
如果是中文版的操作系统,则会输出:五月.

如果是英文操作系统,则输入月份前三个字母的简写:May
string mon = DateTime.Parse("2006-07-01").ToString("MMM")

英文版操作系统:Jul

中文版操作系统:七月

MMMM或更多的M
如果是中文版的操作系统,则会输出:五月.

如果是英文操作系统,则输入月份的全写
string mon = DateTime.Parse("2006-07-01").ToString("MMM")

英文版操作系统:July

中文版操作系统:七月

日期或星期

d
9
string dd= DateTime.Parse("1984-05-09")ToString("d")

dd= "9"


dd
09
string dd= DateTime.Parse("1984-05-09")ToString("dd")

dd= "09"

ddd
如果是中文版的操作系统,则会输出星期,如星期三。.

如果是英文操作系统,则输出星期的简写:如

Wed
string dd = DateTime.Parse("2006-07-01").ToString("ddd")

英文版操作系统:Wed

中文版操作系统:星期三

dddd或更多的d
如果是中文版的操作系统,则会输出星期,如星期三。.

如果是英文操作系统,则输出星期:如

Wednesday
string dd = DateTime.Parse("2006-07-01").ToString("dddd")

英文版操作系统:Wednesday

中文版操作系统:星期三

小时

h
小时范围:1-12
string hh = DateTime.Now.ToString(“h”);

hh = 8

hh或更多的h
小时范围:1-12
string hh = DateTime.Now.ToString(“hh”);

hh = 08

H
小时范围:0-23
string hh = DateTime.Now.ToString(“yyyy-H”);

hh = 2006-8

HH或更多的H
小时范围:0-23
string hh = DateTime.Now.ToString(“yyyy-HH”);

hh = 2006-08

string hh = DateTime.Pare(“2006-7-4 18:00:00”).ToString(“yyyy-HH”);

hh = 2006-18

分钟

m
6
string mm = DateTime.Now.ToString("yyyy-MM-dd-m");

mm = “2006-07-01-6”;

mm或更多的m
06
string mm = DateTime.Now.ToString("yyyy-MM-dd-mm");

mm = “2006-07-01-06”;

s
6
string mm = DateTime.Now.ToString("yyyy-MM-dd-s");

mm = “2006-07-01-6”;

ss或更多的s
06
string mm = DateTime.Now.ToString("yyyy-MM-dd-ss");

mm = “2006-07-01-06”;


发布了450 篇原创文章 · 获赞 59 · 访问量 150万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览