自定义数字格式字符串
本文内容
更新: 2008 年 7 月
您所创建的自定义数字格式字符串由一个或多个自定义数字格式说明符组成,用于定义格式化数值数据的方式。自定义数字格式字符串的等效定义是非标准数字格式字符串 的字符串。
下表描述了自定义数字格式说明符。有关更多信息,请参见表格之后的备注。
0
零占位符
如果要设置格式的值在格式字符串中出现“0”的位置有一个数字,则将此数字复制到结果字符串中;否则,在结果字符串中显示“0”。小数点前最左边的“0”的位置和小数点后最右边的“0”的位置确定总在结果字符串中出现的数字范围。
“00”说明符使得值被舍入到小数点前最近的数字,其中零位总被舍去。例如,用“00”格式化 34.5 将得到值 35。
下面的示例显示几个使用包含零占位符的自定义格式字符串设置格式的值。
Dim value As Double
value = 123
Console.WriteLine(value.ToString("00000" ))
' Displays 00123
value = 1.2
Console.Writeline(value.ToString("0.00" , CultureInfo.InvariantCulture))
' Displays 1.20
Console.WriteLine(value.ToString("00.00" , CultureInfo.InvariantCulture))
' Displays 01.20
Console.WriteLine(value.ToString("00.00" , _
CultureInfo.CreateSpecificCulture("da-DK" )))
' Displays 01,20
value = .56
Console.WriteLine(value.ToString("0.0" , CultureInfo.InvariantCulture))
' Displays 0.6
value = 1234567890
Console.WriteLine(value.ToString("#,#" , CultureInfo.InvariantCulture))
' Displays 1,234,567,890
Console.WriteLine(value.ToString("#,#" , _
CultureInfo.CreateSpecificCulture("el-GR" )))
' Displays 1.234.567.890
double value;
value = 123 ;
Console.WriteLine (value.ToString ("00000" ));
// Displays 00123
value = 1.2 ;
Console.WriteLine (value.ToString ("0.00" , CultureInfo.InvariantCulture ));
// Displays 1.20
Console.WriteLine (value.ToString ("00.00" , CultureInfo.InvariantCulture ));
// Displays 01.20
Console.WriteLine (value.ToString ("00.00" ,
CultureInfo.CreateSpecificCulture ("da-DK" )));
// Displays 01,20
value = .56 ;
Console.WriteLine (value.ToString ("0.0" , CultureInfo.InvariantCulture ));
// Displays 0.6
value = 1234567890 ;
Console.WriteLine (value.ToString ("#,#" , CultureInfo.InvariantCulture ));
// Displays 1,234,567,890
Console.WriteLine (value.ToString ("#,#" ,
CultureInfo.CreateSpecificCulture ("el-GR" )));
// Displays 1.234.567.890
#
数字占位符
如果格式化的值在格式字符串中出现“#”的位置有一个数字,则此数字被复制到结果字符串中。否则,结果字符串中的此位置不存储任何值。
请注意,如果“0”不是有效数字,此说明符永不显示“0”字符,即使“0”是字符串中唯一的数字。如果“0”是所显示的数字中的有效数字,则显示“0”字符。
“##”格式字符串使得值被舍入到小数点前最近的数字,其中零总被舍去。例如,用“##”格式化 34.5 将得到值 35。
下面的示例显示几个使用包含数字占位符的自定义格式字符串设置格式的值。
.
小数点
格式字符串中的第一个“.”字符确定格式化的值中的小数点分隔符的位置;任何其他“.”字符被忽略。
在结果字符串中用作小数分隔符的实际字符由控制格式设置的 NumberFormatInfo 对象的 NumberDecimalSeparator 属性确定。
下面的示例使用小数点格式说明符定义几个结果字符串中的小数点的位置。
,
千位分隔符和数字比例换算
“,”字符可作为千位分隔符说明符和数字比例换算说明符。
千位分隔符说明符:如果在两个设置数字的整数位格式的数字占位符(0 或 #)之间指定一个或多个“,”,则在输出的整数部分中的每个数字组之间插入一个组分隔符。
当前 NumberFormatInfo 对象的 NumberGroupSeparator 和 NumberGroupSizes 属性将确定用作数字组分隔符的字符以及每个数字组的大小。例如,如果使用字符串“#,#”和固定区域性对数字 1000 进行格式化,则输出为“1,000”。
数字比例换算说明符:如果在紧邻显式或隐式小数点的左侧指定一个或多个“,”字符,则每出现一个数字比例换算说明符便将要格式化的数字除以 1000。例如,如果使用字符串“0,,”对数字 100000000 进行格式化,则输出为“100”。
可以在同一格式字符串中使用千位分隔符说明符和数字比例换算说明符。例如,如果使用字符串“#,0,,”和固定区域性对数字 1000000000 进行格式化,则输出为“1,000”。
下面的示例演示如何使用逗号作为千位分隔符。
Dim value As Double = 1234567890
Console.WriteLine(value.ToString("#,#" , CultureInfo.InvariantCulture))
' Displays 1,234,567,890
Console.WriteLine(value.ToString("#,##0,," , CultureInfo.InvariantCulture))
' Displays 1,235
double value = 1234567890 ;
Console.WriteLine (value.ToString ("#,#" , CultureInfo.InvariantCulture ));
// Displays 1,234,567,890
Console.WriteLine (value.ToString ("#,##0,," , CultureInfo.InvariantCulture ));
// Displays 1,235
下面的示例演示如何使用逗号作为数字比例换算说明符。
Dim value As Double = 1234567890
Console.WriteLine(value.ToString("#,," , CultureInfo.InvariantCulture))
' Displays 1235
Console.WriteLine(value.ToString("#,,," , CultureInfo.InvariantCulture))
' Displays 1
Console.WriteLine(value.ToString("#,##0,," , CultureInfo.InvariantCulture))
' Displays 1,235
double value = 1234567890 ;
Console.WriteLine (value.ToString ("#,," , CultureInfo.InvariantCulture ));
// Displays 1235
Console.WriteLine (value.ToString ("#,,," , CultureInfo.InvariantCulture ));
// Displays 1
Console.WriteLine (value.ToString ("#,##0,," , CultureInfo.InvariantCulture ));
// Displays 1,235
%
百分比占位符
在格式字符串中出现“%”字符将导致数字在格式化之前乘以 100。适当的符号插入到数字本身在格式字符串中出现“%”的位置。所使用的百分比字符取决于当前的 NumberFormatInfo 类。
下面的示例定义几个包含百分比占位符的自定义格式字符串。
‰
千分比占位符
在格式字符串中出现“‰”字符 (\u2030) 将使数字在格式化之前乘以 1000。在返回的字符串中,相应的千分比符号插在格式字符串中出现“‰”符号的位置。所用的千分比字符由提供特定于区域性的格式设置信息的对象的 NumberFormatInfo.PerMilleSymbol 属性定义。
下面的示例定义了包含千分比占位符的自定义格式字符串。
E0
E+0
E-0
e0
e+0
e-0
科学记数法
如果“E”、“E+”、“E-”、“e”、“e+”或“e-”中的任何一个字符串出现在格式字符串中,而且后面紧跟至少一个“0”字符,则数字用科学记数法来格式化,在数字和指数之间插入“E”或“e”。跟在科学记数法指示符后面的“0”字符数确定指数输出的最小位数。“E+”和“e+”格式指示符号字符(正号或负号)应总是置于指数前面。“E”、“E-”、“e”或“e-”格式指示符号字符仅置于负指数前面。
下面的示例使用科学记数法说明符设置几个数值的格式。
\
转义符
在 C# 和 C++ 中,反斜杠字符使格式字符串中的下一个字符被解释为转义序列。它与传统的格式化序列一起使用,如“\n”(换行)。
在某些语言中,转义符本身用作文本时必须跟在转义符之后。否则,编译器将该字符理解为转义符。使用字符串“\\”显示“\”。
请注意,Visual Basic 中不支持此转义符;但是 ControlChars 提供相同的功能。
'ABC'
"ABC"
字符串
引在单引号或双引号中的字符被复制到结果字符串中,而且不影响格式化。
;
部分分隔符
“;”字符用于分隔格式字符串中的正数、负数和零各部分。如果自定义格式字符串分为两个部分,则最左边的部分定义正数和零的格式,而最右边的部分定义负数的格式。如果自定义格式字符串分为三个部分,则最左边的部分定义正数的格式,中间部分定义负数的格式,而最右边的部分定义零的格式。
下面的示例使用部分分隔符的格式说明符来分别设置正数、负数和零的格式。
其他
所有其他字符
所有其他字符被复制到结果字符串中,而且不影响格式化。
备注
浮点型无穷大和 NaN
请注意,无论格式字符串原来是什么值,只要 Single 或 Double 浮点类型的值为正无穷大、负无穷大或非数字 (NaN),格式字符串就分别是当前适用的 NumberFormatInfo 对象指定的 PositiveInfinitySymbol 、NegativeInfinitySymbol 或 NaNSymbol 属性的值。
控制面板设置
控制面板中“区域和语言选项”项中的设置会影响由格式化操作产生的结果字符串。这些设置用于初始化与当前线程区域性关联的 NumberFormatInfo 对象,并且当前线程区域性将提供用于控制格式设置的值。使用不同设置的计算机会生成不同的结果字符串。
舍入和定点格式字符串
请注意,对于定点格式字符串(即不包含科学记数法格式字符的格式字符串),数字被舍入为与小数点右边的数字占位符数目相同的小数位数。如果格式字符串不包含小数点,数字被舍入为最接近的整数。如果数字位数多于小数点左边数字占位符的个数,多余的数字被复制到结果字符串中紧挨着第一个数字占位符的前面。
部分分隔符和条件格式
可以根据值为正、为负还是为零来为字符串应用不同的格式化。为产生这种行为,自定义格式字符串可以包含最多三个用分号分隔的部分。下表描述了这些部分。
一个部分
格式字符串应用于所有值。
两个部分
第一部分应用于正值和零,第二部分应用于负值。
如果要格式化的数字为负,但根据第二部分中的格式舍入后为零,则最终的零根据第一部分进行格式化。
三个部分
第一部分应用于正值,第二部分应用于负值,第三部分应用于零。
第二部分可以留空(分号间没有任何内容),在这种情况下,第一部分应用于所有非零值。
如果要格式化的数字为非零值,但根据第一部分或第二部分中的格式舍入后为零,则最终的零根据第三部分进行格式化。
格式化最终值时,部分分隔符忽略所有先前存在的与数字关联的格式设置。例如,使用部分分隔符时,显示的负值永远不带负号。如果您希望格式化后的最终值带有负号,则应明确包含负号,让它作为自定义格式说明符的组成部分。
下面的代码段阐释如何使用部分分隔符产生格式化字符串。
Dim MyPos As Double = 19.95
Dim MyNeg As Double = -19.95
Dim MyZero As Double = 0
' In the U.S. English culture, MyString has the value: $19.95.
Dim MyString As String = MyPos.ToString("$#,##0.00;($#,##0.00);Zero")
' In the U.S. English culture, MyString has the value: ($19.95).
' The minus sign is omitted by default.
MyString = MyNeg.ToString("$#,##0.00;($#,##0.00);Zero")
' In the U.S. English culture, MyString has the value: Zero.
MyString = MyZero.ToString("$#,##0.00;($#,##0.00);Zero")
double MyPos = 19.95, MyNeg = -19.95, MyZero = 0.0;
// In the U.S. English culture, MyString has the value: $19.95.
string MyString = MyPos.ToString("$#,##0.00;($#,##0.00);Zero");
// In the U.S. English culture, MyString has the value: ($19.95).
// The minus sign is omitted by default.
MyString = MyNeg.ToString("$#,##0.00;($#,##0.00);Zero");
// In the U.S. English culture, MyString has the value: Zero.
MyString = MyZero.ToString("$#,##0.00;($#,##0.00);Zero");
两个自定义格式示例
下面的代码段演示自定义数字格式化。在这两个示例中,自定义格式字符串中的数字占位符 (#) 用于显示数值数据,所有其他字符被复制到输出。
Dim myDouble As Double = 1234567890
Dim myString As String = myDouble.ToString( "(###) ### - ####" )
' The value of myString is "(123) 456 – 7890".
Dim MyInt As Integer = 42
MyString = MyInt.ToString( "My Number = #" )
' In the U.S. English culture, MyString has the value:
' "My Number = 42".
Double myDouble = 1234567890;
String myString = myDouble.ToString( "(###) ### - ####" );
// The value of myString is "(123) 456 – 7890".
int MyInt = 42;
MyString = MyInt.ToString( "My Number = #" );
// In the U.S. English culture, MyString has the value:
// "My Number = 42".
请参见
概念
数字格式字符串
标准数字格式字符串
参考
NumberFormatInfo
其他资源
格式化类型
修订记录
2008 年 7 月
新增千分比占位符。
内容 Bug 修复