全文剪切于C#帮助文档,整理出来方便自己后期查阅。
标准数字格式字符串 |
本文内容已由人工翻译。如果您连接了 Internet,请选择“联机查看本主题”以在可编辑模式下对照英文内容查看此页。
向 Microsoft 发送有关本主题的反馈。 | 在默认浏览器中联机查看本主题。 |
标准数字格式字符串用于格式化通用数值类型。 标准数字格式字符串采用 Axx 的形式,其中:
-
A 是称为格式说明符的单个字母字符。 任何包含一个以上字母字符(包括空白)的数字格式字符串都被解释为自定义数字格式字符串。 有关详细信息,请参阅 自定义数字格式字符串。
-
xx 是称为精度说明符的可选整数。 精度说明符的范围从 0 到 99,并且影响结果中的位数。 请注意,精度说明符控制数字的字符串表示形式中的数字个数。 它不舍入该数字。 若要执行舍入运算,请使用 Math. Ceiling、 Math. Floor 或 Math. Round 方法。
当精度说明符控制结果字符串中的小数位数时,结果字符串反映远离零的一侧舍入的数字(即,使用 MidpointRounding. AwayFromZero)。
所有数字类型的 ToString 方法的某些重载支持标准数字格式字符串。 例如,可将数字格式字符串提供给 ToString(String) 类型的 ToString(String, IFormatProvider) 方法和 Int32 方法。 .NET Framework 复合格式化功能也支持标准数字格式字符串,该功能由 Write 和 WriteLine 类的某些 Console 和 StreamWriter 方法、 String. Format 方法以及 StringBuilder. AppendFormat 方法使用。复合格式功能允许你将多个数据项的字符串表示形式包含在单个字符串中,以指定字段宽度,并在字段中对齐数字。 有关详细信息,请参阅 复合格式设置。
提示 |
---|
你可以下载 格式设置实用工具,通过该应用程序,你可将格式字符串应用于数值或日期和时间值并显示结果字符串。 |
下表描述标准的数字格式说明符并显示由每个格式说明符产生的示例输出。 有关使用标准数字格式字符串的其他信息,请参见 注释一节;有关使用方法的完整演示,请参见 示例一节。
格式说明符 |
名称 |
描述 |
示例 |
---|---|---|---|
“C”或“c” |
货币 |
结果:货币值。 受以下类型支持:所有数值类型。 精度说明符:小数位数。 默认值精度说明符:由 NumberFormatInfo. CurrencyDecimalDigits 定义。 更多信息: 货币(“C”)格式说明符。 |
123.456 (“C”, en-US) -> $123.46 123.456 (“C”, fr-FR) -> 123,46 € 123.456 (“C”, ja-JP) -> ¥123 -123.456 (“C3”, en-US) -> ($123.456) -123.456 (“C3”, fr-FR) -> -123,456 € -123.456 (“C3”, ja-JP) -> -¥123.456 |
“D”或“d” |
Decimal |
结果:整型数字,负号可选。 受以下类型支持:仅整型。 精度说明符:最小位数。 默认值精度说明符:所需的最小位数。 更多信息: 十进制(“D”)格式说明符。 |
1234 (“D”) -> 1234 -1234 (“D6”) -> -001234 |
“E”或“e” |
指数(科学型) |
结果:指数记数法。 受以下类型支持:所有数值类型。 精度说明符:小数位数。 默认值精度说明符:6。 更多信息: 指数(“E”)格式说明符。 |
1052.0329112756 (“E”, en-US) -> 1.052033E+003 1052.0329112756 (“e”, fr-FR) -> 1,052033e+003 -1052.0329112756 (“e2”, en-US) -> -1.05e+003 -1052.0329112756 (“E2”, fr_FR) -> -1,05E+003 |
“F”或“f” |
定点 |
结果:整数和小数,负号可选。 受以下类型支持:所有数值类型。 精度说明符:小数位数。 默认值精度说明符:由 NumberFormatInfo. NumberDecimalDigits 定义。 更多信息: 定点(“F”)格式说明符。 |
1234.567 (“F”, en-US) -> 1234.57 1234.567 (“F”, de-DE) -> 1234,57 1234 (“F1”, en-US) -> 1234.0 1234 (“F1”, de-DE) -> 1234,0 -1234.56 (“F4”, en-US) -> -1234.5600 -1234.56 (“F4”, de-DE) -> -1234,5600 |
“G”或“g” |
常规 |
结果:最紧凑的定点表示法或科学记数法。 受以下类型支持:所有数值类型。 精度说明符:有效位数。 默认值精度说明符:取决于数值类型。 更多信息: 常规(“G”)格式说明符。 |
-123.456 (“G”, en-US) -> -123.456 -123.456 (“G”, sv-SE) -> -123,456 123.4546 (“G4”, en-US) -> 123.5 123.4546 (“G4”, sv-SE) -> 123,5 -1.234567890e-25 (“G”, en-US) -> -1.23456789E-25 -1.234567890e-25 (“G”, sv-SE) -> -1,23456789E-25 |
“N”或“n” |
数字 |
结果:整数和小数、组分隔符和小数分隔符,负号可选。 受以下类型支持:所有数值类型。 精度说明符:所需的小数位数。 默认值精度说明符:由 NumberFormatInfo. NumberDecimalDigits 定义。 更多信息: 数字(“N”)格式说明符。 |
1234.567 (“N”, en-US) -> 1,234.57 1234.567 (“N”, ru-RU) -> 1 234,57 1234 (“N1”, en-US) -> 1,234.0 1234 (“N1”, ru-RU) -> 1 234,0 -1234.56 (“N3”, en-US) -> -1,234.560 -1234.56 (“N3”, ru-RU) -> -1 234,560 |
“P”或“p” |
百分比 |
结果:乘以 100 并显示百分比符号的数字。 受以下类型支持:所有数值类型。 精度说明符:所需的小数位数。 默认值精度说明符:由 NumberFormatInfo. PercentDecimalDigits 定义。 更多信息: 百分比(“P”)格式说明符。 |
1 (“P”, en-US) -> 100.00 % 1 (“P”, fr-FR) -> 100,00 % -0.39678 (“P1”, en-US) -> -39.7 % -0.39678 (“P1”, fr-FR) -> -39,7 % |
“R”或“r” |
往返过程 |
结果:可以往返至相同数字的字符串。 受以下类型支持: Single、 Double 和 BigInteger。 精度说明符:忽略。 更多信息: 往返过程(“R”)格式说明符。 |
123456789.12345678 (“R”) -> 123456789.12345678 -1234567890.12345678 (“R”) -> -1234567890.1234567 |
“X”或“x” |
十六进制 |
结果:十六进制字符串。 受以下类型支持:仅整型。 精度说明符:结果字符串中的位数。 更多信息: 十六进制(“X”)格式说明符。 |
255 (“X”) -> FF -1 (“x”) -> ff 255 (“x4”) -> 00ff -1 (“X4”) -> 00FF |
任何其他单个字符 |
未知说明符 |
结果:在运行时引发 FormatException。 |
可采用以下两种方式之一使用标准数字格式字符串定义数值的格式:
-
可以传递给拥有 ToString 参数的 format 方法的重载。 以下示例在当前(在本例中,为 en-US)区域性中将数值的格式设置为货币字符串。
decimal value = 123.456m; Console.WriteLine(value.ToString("C2")); // Displays $123.46
decimal value = 123.456m; Console.WriteLine(value.ToString("C2")); // Displays $123.46
Dim value As Decimal = 123.456d Console.WriteLine(value.ToString("C2")) ' Displays $123.46
Dim value As Decimal = 123.456d Console.WriteLine(value.ToString("C2")) ' Displays $123.46
-
它作为与 formatString、 String. Format 和 Console. WriteLine 等方法一起使用的格式项中的 StringBuilder. AppendFormat 参数提供。有关详细信息,请参阅 复合格式设置。 下面的示例使用格式项在字符串中插入货币值。
decimal value = 123.456m; Console.WriteLine("Your account balance is {0:C2}.", value); // Displays "Your account balance is $123.46."
decimal value = 123.456m; Console.WriteLine("Your account balance is {0:C2}.", value); // Displays "Your account balance is $123.46."
Dim value As Decimal = 123.456d Console.WriteLine("Your account balance is {0:C2}.", value) ' Displays "Your account balance is $123.46."
Dim value As Decimal = 123.456d Console.WriteLine("Your account balance is {0:C2}.", value) ' Displays "Your account balance is $123.46."
以下各节提供有关每个标准数字格式字符串的详细信息。
“C”(或货币)格式说明符将数字转换为表示货币金额的字符串。 精度说明符指示结果字符串中的所需小数位数。 如果省略精度说明符,则默认精度由 NumberFormatInfo. CurrencyDecimalDigits 属性定义。
如果要设置格式的值的小数位数多于指定或默认数量,将在结果字符串中舍入小数值。 如果指定的小数位数右侧的值大于或等于 5,则结果字符串中的最后一位数将向远离零的一侧舍入。
结果字符串受当前 NumberFormatInfo 对象的格式信息的影响。 下表列出了 NumberFormatInfo 属性,这些属性控制返回字符串的格式。
NumberFormatInfo 属性 |
描述 |
---|---|
[ P:System.Globalization.NumberFormatInfo.CurrencyPositivePattern ] |
定义正值的货币符号的位置。 |
[ P:System.Globalization.NumberFormatInfo.CurrencyNegativePattern ] |
定义负值的货币符号的位置,并指定负号由括号表示还是由 NegativeSign 属性表示。 |
[ P:System.Globalization.NumberFormatInfo.NegativeSign ] |
如果 CurrencyNegativePattern 指示不使用括号,则定义使用负号。 |
[ P:System.Globalization.NumberFormatInfo.CurrencySymbol ] |
定义货币符号。 |
[ P:System.Globalization.NumberFormatInfo.CurrencyDecimalDigits ] |
定义货币值中的默认小数位数。 可使用精度说明符重写此值。 |
[ P:System.Globalization.NumberFormatInfo.CurrencyDecimalSeparator ] |
定义分隔整数位和小数位的字符串。 |
[ P:System.Globalization.NumberFormatInfo.CurrencyGroupSeparator ] |
定义分隔整数的组的字符串。 |
[ P:System.Globalization.NumberFormatInfo.CurrencyGroupSizes ] |
指定在组中显示的整数位数。 |
下面的示例使用货币格式说明符设置 Double 值的格式。
double value = 12345.6789; Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture)); Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture)); Console.WriteLine(value.ToString("C3", CultureInfo.CreateSpecificCulture("da-DK"))); // The example displays the following output on a system whose // current culture is English (United States): // $12,345.68 // $12,345.679 // kr 12.345,679
double value = 12345.6789; Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture)); Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture)); Console.WriteLine(value.ToString("C3", CultureInfo.CreateSpecificCulture("da-DK"))); // The example displays the following output on a system whose // current culture is English (United States): // $12,345.68 // $12,345.679 // kr 12.345,679
Dim value As Double = 12345.6789 Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture)) Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture)) Console.WriteLine(value.ToString("C3", _ CultureInfo.CreateSpecificCulture("da-DK"))) ' The example displays the following output on a system whose ' current culture is English (United States): ' $12,345.68 ' $12,345.679 ' kr 12.345,679
Dim value As Double = 12345.6789 Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture)) Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture)) Console.WriteLine(value.ToString("C3", _ CultureInfo.CreateSpecificCulture("da-DK"))) ' The example displays the following output on a system whose ' current culture is English (United States): ' $12,345.68 ' $12,345.679 ' kr 12.345,679
“D”(或十进制)格式说明符将数字转换为十进制数字 (0-9) 的字符串,如果数字为负,则前面加负号。 只有整型才支持此格式。
精度说明符指示结果字符串中所需的最少数字个数。 如果需要的话,则用零填充该数字的左侧,以产生精度说明符给定的数字个数。 如果未指定精度说明符,则默认值为表示不带前导零的整数所需的最小值。
结果字符串受当前 NumberFormatInfo 对象的格式信息的影响。 如下表所示,一个属性会影响结果字符串的格式。
NumberFormatInfo 属性 |
描述 |
---|---|
[ P:System.Globalization.NumberFormatInfo.NegativeSign ] |
定义指示数字为负值的字符串。 |
下面的示例使用十进制格式说明符设置 Int32 值的格式。
int value; value = 12345; Console.WriteLine(value.ToString("D")); // Displays 12345 Console.WriteLine(value.ToString("D8")); // Displays 00012345 value = -12345; Console.WriteLine(value.ToString("D")); // Displays -12345 Console.WriteLine(value.ToString("D8")); // Displays -00012345
int value; value = 12345; Console.WriteLine(value.ToString("D")); // Displays 12345 Console.WriteLine(value.ToString("D8")); // Displays 00012345 value = -12345; Console.WriteLine(value.ToString("D")); // Displays -12345 Console.WriteLine(value.ToString("D8")); // Displays -00012345
Dim value As Integer value = 12345 Console.WriteLine(value.ToString("D")) ' Displays 12345 Console.WriteLine(value.ToString("D8")) ' Displays 00012345 value = -12345 Console.WriteLine(value.ToString("D")) ' Displays -12345 Console.WriteLine(value.ToString("D8")) ' Displays -00012345
Dim value As Integer value = 12345 Console.WriteLine(value.ToString("D")) ' Displays 12345 Console.WriteLine(value.ToString("D8")) ' Displays 00012345 value = -12345 Console.WriteLine(value.ToString("D")) ' Displays -12345 Console.WriteLine(value.ToString("D8")) ' Displays -00012345
指数(“E”)格式说明符将数字转换为“-d.ddd…E+ddd”或“-d.ddd…e+ddd”形式的字符串,其中每个“d”表示一个数字 (0-9)。 如果该数字为负,则该字符串以减号开头。 小数点前总是恰好有一个数字。
精度说明符指示小数点后所需的位数。 如果省略精度说明符,则使用默认值,即小数点后六位数字。
格式说明符的大小写指示为指数加前缀“E”还是“e”。 指数总是由正号或负号以及最少三位数字组成。 如果需要,用零填充指数以满足最少三位数字的要求。
结果字符串受当前 NumberFormatInfo 对象的格式信息的影响。 下表列出了 NumberFormatInfo 属性,这些属性控制返回字符串的格式。
NumberFormatInfo 属性 |
描述 |
---|---|
[ P:System.Globalization.NumberFormatInfo.NegativeSign ] |
定义表示数字对于系数和指数都为负值的字符串。 |
[ P:System.Globalization.NumberFormatInfo.NumberDecimalSeparator ] |
定义在系数中将整数位与小数位分隔的字符串。 |
[ P:System.Globalization.NumberFormatInfo.PositiveSign ] |
定义指示指数为正值的字符串。 |
下面的示例使用指数格式说明符设置 Double 值的格式。
double value = 12345.6789; Console.WriteLine(value.ToString("E", CultureInfo.InvariantCulture)); // Displays 1.234568E+004 Console.WriteLine(value.ToString("E10", CultureInfo.InvariantCulture)); // Displays 1.2345678900E+004 Console.WriteLine(value.ToString("e4", CultureInfo.InvariantCulture)); // Displays 1.2346e+004 Console.WriteLine(value.ToString("E", CultureInfo.CreateSpecificCulture("fr-FR"))); // Displays 1,234568E+004
double value = 12345.6789; Console.WriteLine(value.ToString("E", CultureInfo.InvariantCulture)); // Displays 1.234568E+004 Console.WriteLine(value.ToString("E10", CultureInfo.InvariantCulture)); // Displays 1.2345678900E+004 Console.WriteLine(value.ToString("e4", CultureInfo.InvariantCulture)); // Displays 1.2346e+004 Console.WriteLine(value.ToString("E", CultureInfo.CreateSpecificCulture("fr-FR"))); // Displays 1,234568E+004
Dim value As Double = 12345.6789 Console.WriteLine(value.ToString("E", CultureInfo.InvariantCulture)) ' Displays 1.234568E+004 Console.WriteLine(value.ToString("E10", CultureInfo.InvariantCulture)) ' Displays 1.2345678900E+004 Console.WriteLine(value.ToString("e4", CultureInfo.InvariantCulture)) ' Displays 1.2346e+004 Console.WriteLine(value.ToString("E", _ CultureInfo.CreateSpecificCulture("fr-FR"))) ' Displays 1,234568E+004
Dim value As Double = 12345.6789 Console.WriteLine(value.ToString("E", CultureInfo.InvariantCulture)) ' Displays 1.234568E+004 Console.WriteLine(value.ToString("E10", CultureInfo.InvariantCulture)) ' Displays 1.2345678900E+004 Console.WriteLine(value.ToString("e4", CultureInfo.InvariantCulture)) ' Displays 1.2346e+004 Console.WriteLine(value.ToString("E", _ CultureInfo.CreateSpecificCulture("fr-FR"))) ' Displays 1,234568E+004
定点(“F”)格式说明符将数字转换为“-ddd.ddd…”形式的字符串,其中每个“d”表示一个数字 (0-9)。 如果该数字为负,则该字符串以减号开头。
精度说明符指示所需的小数位数。 如果省略精度说明符,则当前 NumberFormatInfo. NumberDecimalDigits 属性提供数值精度。
结果字符串受当前 NumberFormatInfo 对象的格式信息的影响。 下表列出了 NumberFormatInfo 对象的属性,这些属性控制结果字符串的格式。
NumberFormatInfo 属性 |
描述 |
---|---|
[ P:System.Globalization.NumberFormatInfo.NegativeSign ] |
定义指示数字为负值的字符串。 |
[ P:System.Globalization.NumberFormatInfo.NumberDecimalSeparator ] |
定义将整数位与小数位分隔的字符串。 |
[ P:System.Globalization.NumberFormatInfo.NumberDecimalDigits ] |
定义默认小数位数。 可使用精度说明符重写此值。 |
下面的示例使用定点格式说明符设置 Double 和 Int32 值的格式。
int integerNumber; integerNumber = 17843; Console.WriteLine(integerNumber.ToString("F", CultureInfo.InvariantCulture)); // Displays 17843.00 integerNumber = -29541; Console.WriteLine(integerNumber.ToString("F3", CultureInfo.InvariantCulture)); // Displays -29541.000 double doubleNumber; doubleNumber = 18934.1879; Console.WriteLine(doubleNumber.ToString("F", CultureInfo.InvariantCulture)); // Displays 18934.19 Console.WriteLine(doubleNumber.ToString("F0", CultureInfo.InvariantCulture)); // Displays 18934 doubleNumber = -1898300.1987; Console.WriteLine(doubleNumber.ToString("F1", CultureInfo.InvariantCulture)); // Displays -1898300.2 Console.WriteLine(doubleNumber.ToString("F3", CultureInfo.CreateSpecificCulture("es-ES"))); // Displays -1898300,199
int integerNumber; integerNumber = 17843; Console.WriteLine(integerNumber.ToString("F", CultureInfo.InvariantCulture)); // Displays 17843.00 integerNumber = -29541; Console.WriteLine(integerNumber.ToString("F3", CultureInfo.InvariantCulture)); // Displays -29541.000 double doubleNumber; doubleNumber = 18934.1879; Console.WriteLine(doubleNumber.ToString("F", CultureInfo.InvariantCulture)); // Displays 18934.19 Console.WriteLine(doubleNumber.ToString("F0", CultureInfo.InvariantCulture)); // Displays 18934 doubleNumber = -1898300.1987; Console.WriteLine(doubleNumber.ToString("F1", CultureInfo.InvariantCulture)); // Displays -1898300.2 Console.WriteLine(doubleNumber.ToString("F3", CultureInfo.CreateSpecificCulture("es-ES"))); // Displays -1898300,199
Dim integerNumber As Integer integerNumber = 17843 Console.WriteLine(integerNumber.ToString("F", CultureInfo.InvariantCulture)) ' Displays 17843.00 integerNumber = -29541 Console.WriteLine(integerNumber.ToString("F3", CultureInfo.InvariantCulture)) ' Displays -29541.000 Dim doubleNumber As Double doubleNumber = 18934.1879 Console.WriteLine(doubleNumber.ToString("F", CultureInfo.InvariantCulture)) ' Displays 18934.19 Console.WriteLine(doubleNumber.ToString("F0", CultureInfo.InvariantCulture)) ' Displays 18934 doubleNumber = -1898300.1987 Console.WriteLine(doubleNumber.ToString("F1", CultureInfo.InvariantCulture)) ' Displays -1898300.2 Console.WriteLine(doubleNumber.ToString("F3", _ CultureInfo.CreateSpecificCulture("es-ES"))) ' Displays -1898300,199
Dim integerNumber As Integer integerNumber = 17843 Console.WriteLine(integerNumber.ToString("F", CultureInfo.InvariantCulture)) ' Displays 17843.00 integerNumber = -29541 Console.WriteLine(integerNumber.ToString("F3", CultureInfo.InvariantCulture)) ' Displays -29541.000 Dim doubleNumber As Double doubleNumber = 18934.1879 Console.WriteLine(doubleNumber.ToString("F", CultureInfo.InvariantCulture)) ' Displays 18934.19 Console.WriteLine(doubleNumber.ToString("F0", CultureInfo.InvariantCulture)) ' Displays 18934 doubleNumber = -1898300.1987 Console.WriteLine(doubleNumber.ToString("F1", CultureInfo.InvariantCulture)) ' Displays -1898300.2 Console.WriteLine(doubleNumber.ToString("F3", _ CultureInfo.CreateSpecificCulture("es-ES"))) ' Displays -1898300,199
根据数字类型以及是否存在精度说明符,常规(“G”)格式说明符将数字转换为最紧凑的定点表示法或科学记数法。 精度说明符定义可以出现在结果字符串中的最大有效位数。 如果精度说明符被省略或为零,则数字的类型决定默认精度,如下表所示。
数值类型 |
默认值精度 |
---|---|
3 位 |
|
5 位 |
|
10 位 |
|
[ T:System.Int64 ] |
19 位 |
[ T:System.UInt64 ] |
20 位 |
[ T:System.Numerics.BigInteger ] |
50 位 |
[ T:System.Single ] |
7 位 |
[ T:System.Double ] |
15 位 |
[ T:System.Decimal ] |
29 位 |
如果用科学记数法表示数字时指数大于 -5 而且小于精度说明符,则使用定点表示法;否则使用科学记数法。 结果包含小数点(如果需要),并且忽略小数点后面的尾部零。 如果精度说明符存在,并且结果的有效位数超过指定精度,则通过舍入移除多余的尾部数字。
但是,如果数字是 Decimal 并且省略精度说明符,将总是使用定点表示法并保留尾部零。
使用科学记数法时,如果格式说明符是“G”,则结果的指数带前缀“E”;如果格式说明符是“g”,则结果的指数带前缀“e”。 指数最少包含两个数字。 这与由指数格式说明符生成的科学记数法的格式不同,后者在指数中最少包括三个数字。
结果字符串受当前 NumberFormatInfo 对象的格式信息的影响。 下表列出了 NumberFormatInfo 属性,这些属性控制结果字符串的格式。
NumberFormatInfo 属性 |
描述 |
---|---|
[ P:System.Globalization.NumberFormatInfo.NegativeSign ] |
定义指示数字为负值的字符串。 |
[ P:System.Globalization.NumberFormatInfo.NumberDecimalSeparator ] |
定义将整数位与小数位分隔的字符串。 |
[ P:System.Globalization.NumberFormatInfo.PositiveSign ] |
定义指示指数为正值的字符串。 |
下面的示例使用常规格式说明符设置各种浮点值的格式。
double number; number = 12345.6789; Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture)); // Displays 12345.6789 Console.WriteLine(number.ToString("G", CultureInfo.CreateSpecificCulture("fr-FR"))); // Displays 12345,6789 Console.WriteLine(number.ToString("G7", CultureInfo.InvariantCulture)); // Displays 12345.68 number = .0000023; Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture)); // Displays 2.3E-06 Console.WriteLine(number.ToString("G", CultureInfo.CreateSpecificCulture("fr-FR"))); // Displays 2,3E-06 number = .0023; Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture)); // Displays 0.0023 number = 1234; Console.WriteLine(number.ToString("G2", CultureInfo.InvariantCulture)); // Displays 1.2E+03 number = Math.PI; Console.WriteLine(number.ToString("G5", CultureInfo.InvariantCulture)); // Displays 3.1416
double number; number = 12345.6789; Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture)); // Displays 12345.6789 Console.WriteLine(number.ToString("G", CultureInfo.CreateSpecificCulture("fr-FR"))); // Displays 12345,6789 Console.WriteLine(number.ToString("G7", CultureInfo.InvariantCulture)); // Displays 12345.68 number = .0000023; Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture)); // Displays 2.3E-06 Console.WriteLine(number.ToString("G", CultureInfo.CreateSpecificCulture("fr-FR"))); // Displays 2,3E-06 number = .0023; Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture)); // Displays 0.0023 number = 1234; Console.WriteLine(number.ToString("G2", CultureInfo.InvariantCulture)); // Displays 1.2E+03 number = Math.PI; Console.WriteLine(number.ToString("G5", CultureInfo.InvariantCulture)); // Displays 3.1416
Dim number As Double number = 12345.6789 Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture)) ' Displays 12345.6789 Console.WriteLine(number.ToString("G", _ CultureInfo.CreateSpecificCulture("fr-FR"))) ' Displays 12345,6789 Console.WriteLine(number.ToString("G7", CultureInfo.InvariantCulture)) ' Displays 12345.68 number = .0000023 Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture)) ' Displays 2.3E-06 Console.WriteLine(number.ToString("G", _ CultureInfo.CreateSpecificCulture("fr-FR"))) ' Displays 2,3E-06 number = .0023 Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture)) ' Displays 0.0023 number = 1234 Console.WriteLine(number.ToString("G2", CultureInfo.InvariantCulture)) ' Displays 1.2E+03 number = Math.Pi Console.WriteLine(number.ToString("G5", CultureInfo.InvariantCulture)) ' Displays 3.1416
Dim number As Double number = 12345.6789 Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture)) ' Displays 12345.6789 Console.WriteLine(number.ToString("G", _ CultureInfo.CreateSpecificCulture("fr-FR"))) ' Displays 12345,6789 Console.WriteLine(number.ToString("G7", CultureInfo.InvariantCulture)) ' Displays 12345.68 number = .0000023 Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture)) ' Displays 2.3E-06 Console.WriteLine(number.ToString("G", _ CultureInfo.CreateSpecificCulture("fr-FR"))) ' Displays 2,3E-06 number = .0023 Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture)) ' Displays 0.0023 number = 1234 Console.WriteLine(number.ToString("G2", CultureInfo.InvariantCulture)) ' Displays 1.2E+03 number = Math.Pi Console.WriteLine(number.ToString("G5", CultureInfo.InvariantCulture)) ' Displays 3.1416
数字(”N”)格式说明符将数字转换为”-d,ddd,ddd.ddd…”形式的字符串,其中”-“表示负数符号(如果需要),”d”表示数字 (0-9),”,”表示组分隔符,”.”表示小数点符号。 精度说明符指示小数点后所需的位数。 如果省略精度限定符,则小数位数由当前的 NumberFormatInfo. NumberDecimalDigits 属性来定义。
结果字符串受当前 NumberFormatInfo 对象的格式信息的影响。 下表列出了 NumberFormatInfo 属性,这些属性控制结果字符串的格式。
NumberFormatInfo 属性 |
描述 |
---|---|
[ P:System.Globalization.NumberFormatInfo.NegativeSign ] |
定义指示数字为负值的字符串。 |
[ P:System.Globalization.NumberFormatInfo.NumberNegativePattern ] |
定义负值的格式,并指定负号由括号表示还是由 NegativeSign 属性表示。 |
[ P:System.Globalization.NumberFormatInfo.NumberGroupSizes ] |
指定在组分隔符之间显示的整数位数。 |
[ P:System.Globalization.NumberFormatInfo.NumberGroupSeparator ] |
定义分隔整数的组的字符串。 |
[ P:System.Globalization.NumberFormatInfo.NumberDecimalSeparator ] |
定义分隔整数位和小数位的字符串。 |
[ P:System.Globalization.NumberFormatInfo.NumberDecimalDigits ] |
定义默认小数位数。 可使用精度说明符重写此值。 |
下面的示例使用数字格式说明符设置各种浮点值的格式。
double dblValue = -12445.6789; Console.WriteLine(dblValue.ToString("N", CultureInfo.InvariantCulture)); // Displays -12,445.68 Console.WriteLine(dblValue.ToString("N1", CultureInfo.CreateSpecificCulture("sv-SE"))); // Displays -12 445,7 int intValue = 123456789; Console.WriteLine(intValue.ToString("N1", CultureInfo.InvariantCulture)); // Displays 123,456,789.0
double dblValue = -12445.6789; Console.WriteLine(dblValue.ToString("N", CultureInfo.InvariantCulture)); // Displays -12,445.68 Console.WriteLine(dblValue.ToString("N1", CultureInfo.CreateSpecificCulture("sv-SE"))); // Displays -12 445,7 int intValue = 123456789; Console.WriteLine(intValue.ToString("N1", CultureInfo.InvariantCulture)); // Displays 123,456,789.0
Dim dblValue As Double = -12445.6789 Console.WriteLine(dblValue.ToString("N", CultureInfo.InvariantCulture)) ' Displays -12,445.68 Console.WriteLine(dblValue.ToString("N1", _ CultureInfo.CreateSpecificCulture("sv-SE"))) ' Displays -12 445,7 Dim intValue As Integer = 123456789 Console.WriteLine(intValue.ToString("N1", CultureInfo.InvariantCulture)) ' Displays 123,456,789.0
Dim dblValue As Double = -12445.6789 Console.WriteLine(dblValue.ToString("N", CultureInfo.InvariantCulture)) ' Displays -12,445.68 Console.WriteLine(dblValue.ToString("N1", _ CultureInfo.CreateSpecificCulture("sv-SE"))) ' Displays -12 445,7 Dim intValue As Integer = 123456789 Console.WriteLine(intValue.ToString("N1", CultureInfo.InvariantCulture)) ' Displays 123,456,789.0
百分比(“P”)格式说明符将数字乘以 100 并将其转换为表示百分比的字符串。 精度说明符指示所需的小数位数。 如果省略精度说明符,则使用当前 PercentDecimalDigits 属性提供的默认数值精度。
下表列出了 NumberFormatInfo 属性,这些属性控制返回字符串的格式。
NumberFormatInfo 属性 |
描述 |
---|---|
[ P:System.Globalization.NumberFormatInfo.PercentPositivePattern ] |
定义正值的百分比符号的位置。 |
[ P:System.Globalization.NumberFormatInfo.PercentNegativePattern ] |
定义负值的百分比符号和负号的位置。 |
[ P:System.Globalization.NumberFormatInfo.NegativeSign ] |
定义指示数字为负值的字符串。 |
[ P:System.Globalization.NumberFormatInfo.PercentSymbol ] |
定义百分比符号。 |
[ P:System.Globalization.NumberFormatInfo.PercentDecimalDigits ] |
定义百分比值中的默认小数位数。 可使用精度说明符重写此值。 |
[ P:System.Globalization.NumberFormatInfo.PercentDecimalSeparator ] |
定义分隔整数位和小数位的字符串。 |
[ P:System.Globalization.NumberFormatInfo.PercentGroupSeparator ] |
定义分隔整数的组的字符串。 |
[ P:System.Globalization.NumberFormatInfo.PercentGroupSizes ] |
指定在组中显示的整数位数。 |
下面的示例使用百分比格式说明符设置浮点值的格式。
double number = .2468013; Console.WriteLine(number.ToString("P", CultureInfo.InvariantCulture)); // Displays 24.68 % Console.WriteLine(number.ToString("P", CultureInfo.CreateSpecificCulture("hr-HR"))); // Displays 24,68% Console.WriteLine(number.ToString("P1", CultureInfo.InvariantCulture)); // Displays 24.7 %
double number = .2468013; Console.WriteLine(number.ToString("P", CultureInfo.InvariantCulture)); // Displays 24.68 % Console.WriteLine(number.ToString("P", CultureInfo.CreateSpecificCulture("hr-HR"))); // Displays 24,68% Console.WriteLine(number.ToString("P1", CultureInfo.InvariantCulture)); // Displays 24.7 %
Dim number As Double = .2468013 Console.WriteLine(number.ToString("P", CultureInfo.InvariantCulture)) ' Displays 24.68 % Console.WriteLine(number.ToString("P", _ CultureInfo.CreateSpecificCulture("hr-HR"))) ' Displays 24,68% Console.WriteLine(number.ToString("P1", CultureInfo.InvariantCulture)) ' Displays 24.7 %
Dim number As Double = .2468013 Console.WriteLine(number.ToString("P", CultureInfo.InvariantCulture)) ' Displays 24.68 % Console.WriteLine(number.ToString("P", _ CultureInfo.CreateSpecificCulture("hr-HR"))) ' Displays 24,68% Console.WriteLine(number.ToString("P1", CultureInfo.InvariantCulture)) ' Displays 24.7 %
往返(“R”)格式说明符用于确保转换为字符串的数值将再次分析为相同的数值。 只有 Single、 Double 和 BigInteger 类型支持此格式。
如果使用此说明符设置 BigInteger 值的格式,其字符串表示形式将包含 BigInteger 值中的所有有效位。 使用此说明符设置 Single 或 Double 值的格式时,将首先使用常规格式对其进行测试,如果是 Double,则采用 15 位精度,如果是 Single,则采用 7 位精度。 如果此值被成功地分析回相同的数值,则使用常规格式说明符来设置其格式。 如果未能将此值成功分析回相同的数值,则通过以下方式设置其格式:对 Double 使用 17 位精度,对 Single 使用 9 位精度。
尽管可以包括精度说明符,但会忽略它。 使用此说明符时,往返过程优先于精度。
结果字符串受当前 NumberFormatInfo 对象的格式信息的影响。 下表列出了 NumberFormatInfo 属性,这些属性控制结果字符串的格式。
NumberFormatInfo 属性 |
描述 |
---|---|
[ P:System.Globalization.NumberFormatInfo.NegativeSign ] |
定义指示数字为负值的字符串。 |
[ P:System.Globalization.NumberFormatInfo.NumberDecimalSeparator ] |
定义将整数位与小数位分隔的字符串。 |
[ P:System.Globalization.NumberFormatInfo.PositiveSign ] |
定义指示指数为正值的字符串。 |
下面的示例使用往返过程格式说明符设置 Double 值的格式。
double value; value = Math.PI; Console.WriteLine(value.ToString("r")); // Displays 3.1415926535897931 Console.WriteLine(value.ToString("r", CultureInfo.CreateSpecificCulture("fr-FR"))); // Displays 3,1415926535897931 value = 1.623e-21; Console.WriteLine(value.ToString("r")); // Displays 1.623E-21
double value; value = Math.PI; Console.WriteLine(value.ToString("r")); // Displays 3.1415926535897931 Console.WriteLine(value.ToString("r", CultureInfo.CreateSpecificCulture("fr-FR"))); // Displays 3,1415926535897931 value = 1.623e-21; Console.WriteLine(value.ToString("r")); // Displays 1.623E-21
Dim value As Double value = Math.Pi Console.WriteLine(value.ToString("r")) ' Displays 3.1415926535897931 Console.WriteLine(value.ToString("r", _ CultureInfo.CreateSpecificCulture("fr-FR"))) ' Displays 3,1415926535897931 value = 1.623e-21 Console.WriteLine(value.ToString("r")) ' Displays 1.623E-21
Dim value As Double value = Math.Pi Console.WriteLine(value.ToString("r")) ' Displays 3.1415926535897931 Console.WriteLine(value.ToString("r", _ CultureInfo.CreateSpecificCulture("fr-FR"))) ' Displays 3,1415926535897931 value = 1.623e-21 Console.WriteLine(value.ToString("r")) ' Displays 1.623E-21
重要事项 |
---|
在某些情况下,如果使用“R”标准数字格式字符串格式化的 Double 值使用 /platform:x64 或 /platform:anycpu 交换机编译并在 64 位系统上运行,则该值将无法成功往返。 有关详细信息,请参阅以下段落。 |
若要解决使用“R”标准数字格式字符串格式化的 Double 值在使用 /platform:x64 或 /platform:anycpu 交换机进行编译并在 64 位系统上运行时所出现的往返不成功的问题,可以使用“G17”标准数字格式字符格式化 Double 值。 以下示例将“R”格式字符串与无法成功往返的 Double 值配合使用,并使用“G17”格式字符串以成功往返原始值。
using System; using System.Globalization; public class Example { static void Main(string[] args) { Console.WriteLine("Attempting to round-trip a Double with 'R':"); double initialValue = 0.6822871999174; string valueString = initialValue.ToString("R", CultureInfo.InvariantCulture); double roundTripped = double.Parse(valueString, CultureInfo.InvariantCulture); Console.WriteLine("{0:R} = {1:R}: {2}/n", initialValue, roundTripped, initialValue.Equals(roundTripped)); Console.WriteLine("Attempting to round-trip a Double with 'G17':"); string valueString17 = initialValue.ToString("G17", CultureInfo.InvariantCulture); double roundTripped17 = double.Parse(valueString17, CultureInfo.InvariantCulture); Console.WriteLine("{0:R} = {1:R}: {2}/n", initialValue, roundTripped17, initialValue.Equals(roundTripped17)); } } // If compiled to an application that targets anycpu or x64 and run on an x64 system, // the example displays the following output: // Attempting to round-trip a Double with 'R': // 0.6822871999174 = 0.68228719991740006: False // // Attempting to round-trip a Double with 'G17': // 0.6822871999174 = 0.6822871999174: True
using System; using System.Globalization; public class Example { static void Main(string[] args) { Console.WriteLine("Attempting to round-trip a Double with 'R':"); double initialValue = 0.6822871999174; string valueString = initialValue.ToString("R", CultureInfo.InvariantCulture); double roundTripped = double.Parse(valueString, CultureInfo.InvariantCulture); Console.WriteLine("{0:R} = {1:R}: {2}/n", initialValue, roundTripped, initialValue.Equals(roundTripped)); Console.WriteLine("Attempting to round-trip a Double with 'G17':"); string valueString17 = initialValue.ToString("G17", CultureInfo.InvariantCulture); double roundTripped17 = double.Parse(valueString17, CultureInfo.InvariantCulture); Console.WriteLine("{0:R} = {1:R}: {2}/n", initialValue, roundTripped17, initialValue.Equals(roundTripped17)); } } // If compiled to an application that targets anycpu or x64 and run on an x64 system, // the example displays the following output: // Attempting to round-trip a Double with 'R': // 0.6822871999174 = 0.68228719991740006: False // // Attempting to round-trip a Double with 'G17': // 0.6822871999174 = 0.6822871999174: True
Imports System.Globalization Module Example Public Sub Main() Console.WriteLine("Attempting to round-trip a Double with 'R':") Dim initialValue As Double = 0.6822871999174 Dim valueString As String = initialValue.ToString("R", CultureInfo.InvariantCulture) Dim roundTripped As Double = Double.Parse(valueString, CultureInfo.InvariantCulture) Console.WriteLine("{0:R} = {1:R}: {2}", initialValue, roundTripped, initialValue.Equals(roundTripped)) Console.WriteLine() Console.WriteLine("Attempting to round-trip a Double with 'G17':") Dim valueString17 As String = initialValue.ToString("G17", CultureInfo.InvariantCulture) Dim roundTripped17 As Double = double.Parse(valueString17, CultureInfo.InvariantCulture) Console.WriteLine("{0:R} = {1:R}: {2}", initialValue, roundTripped17, initialValue.Equals(roundTripped17)) End Sub End Module ' If compiled to an application that targets anycpu or x64 and run on an x64 system, ' the example displays the following output: ' Attempting to round-trip a Double with 'R': ' 0.6822871999174 = 0.68228719991740006: False ' ' Attempting to round-trip a Double with 'G17': ' 0.6822871999174 = 0.6822871999174: True
Imports System.Globalization Module Example Public Sub Main() Console.WriteLine("Attempting to round-trip a Double with 'R':") Dim initialValue As Double = 0.6822871999174 Dim valueString As String = initialValue.ToString("R", CultureInfo.InvariantCulture) Dim roundTripped As Double = Double.Parse(valueString, CultureInfo.InvariantCulture) Console.WriteLine("{0:R} = {1:R}: {2}", initialValue, roundTripped, initialValue.Equals(roundTripped)) Console.WriteLine() Console.WriteLine("Attempting to round-trip a Double with 'G17':") Dim valueString17 As String = initialValue.ToString("G17", CultureInfo.InvariantCulture) Dim roundTripped17 As Double = double.Parse(valueString17, CultureInfo.InvariantCulture) Console.WriteLine("{0:R} = {1:R}: {2}", initialValue, roundTripped17, initialValue.Equals(roundTripped17)) End Sub End Module ' If compiled to an application that targets anycpu or x64 and run on an x64 system, ' the example displays the following output: ' Attempting to round-trip a Double with 'R': ' 0.6822871999174 = 0.68228719991740006: False ' ' Attempting to round-trip a Double with 'G17': ' 0.6822871999174 = 0.6822871999174: True
十六进制(“X”)格式说明符将数字转换为十六进制数的字符串。 格式说明符的大小写指示对大于 9 的十六进制数使用大写字符还是小写字符。 例如,使用“X”产生“ABCDEF”,使用“x”产生“abcdef”。 只有整型才支持此格式。
精度说明符指示结果字符串中所需的最少数字个数。 如果需要的话,则用零填充该数字的左侧,以产生精度说明符给定的数字个数。
结果字符串不受当前 NumberFormatInfo 对象的格式信息的影响。
下面的示例使用十六进制数法格式说明符设置 Int32 值的格式。
int value; value = 0x2045e; Console.WriteLine(value.ToString("x")); // Displays 2045e Console.WriteLine(value.ToString("X")); // Displays 2045E Console.WriteLine(value.ToString("X8")); // Displays 0002045E value = 123456789; Console.WriteLine(value.ToString("X")); // Displays 75BCD15 Console.WriteLine(value.ToString("X2")); // Displays 75BCD15
int value; value = 0x2045e; Console.WriteLine(value.ToString("x")); // Displays 2045e Console.WriteLine(value.ToString("X")); // Displays 2045E Console.WriteLine(value.ToString("X8")); // Displays 0002045E value = 123456789; Console.WriteLine(value.ToString("X")); // Displays 75BCD15 Console.WriteLine(value.ToString("X2")); // Displays 75BCD15
Dim value As Integer value = &h2045e Console.WriteLine(value.ToString("x")) ' Displays 2045e Console.WriteLine(value.ToString("X")) ' Displays 2045E Console.WriteLine(value.ToString("X8")) ' Displays 0002045E value = 123456789 Console.WriteLine(value.ToString("X")) ' Displays 75BCD15 Console.WriteLine(value.ToString("X2")) ' Displays 75BCD15
Dim value As Integer value = &h2045e Console.WriteLine(value.ToString("x")) ' Displays 2045e Console.WriteLine(value.ToString("X")) ' Displays 2045E Console.WriteLine(value.ToString("X8")) ' Displays 0002045E value = 123456789 Console.WriteLine(value.ToString("X")) ' Displays 75BCD15 Console.WriteLine(value.ToString("X2")) ' Displays 75BCD15
控制面板设置
控制面板中“区域和语言选项”项中的设置会影响由格式化操作产生的结果字符串。 这些设置用于初始化与当前线程区域性关联的 NumberFormatInfo 对象,当前线程区域性提供用于控制格式设置的值。 使用不同设置的计算机将生成不同的结果字符串。
此外,如果使用 CultureInfo. CultureInfo(String) 构造函数实例化一个新的 CultureInfo 对象以表示与当前的系统区域性相同的区域性,则通过控制面板中的“区域和语言选项”建立的任何自定义都将应用到新的 CultureInfo 对象。 可以使用 CultureInfo. CultureInfo(String, Boolean) 构造函数来创建不会反映系统的自定义项的 CultureInfo 对象。
NumberFormatInfo 属性
格式设置受当前 NumberFormatInfo 对象的属性影响,它由当前线程区域性隐式提供或由调用格式设置的方法的 IFormatProvider 参数显式提供。 为该参数指定 NumberFormatInfo 或 CultureInfo 对象。
说明 |
---|
有关自定义用于格式化数值的模式或字符串的信息,请参见 NumberFormatInfo 类主题。 |
整型和浮点型数值类型
对标准数字格式说明符的一些说明涉及到整型或浮点型数值类型。 整型数值类型包括 Byte、 SByte、 Int16、 Int32、 Int64、 UInt16、 UInt32、 UInt64 和 BigInteger。 浮点型数值类型有 Decimal、 Single 和 Double。
浮点型无穷大和 NaN
无论格式字符串原来是什么值,只要 Single 或 Double 浮点类型的值为正无穷大、负无穷大或非数值 (NaN),格式字符串就分别是当前适用的 PositiveInfinitySymbol 对象指定的 NegativeInfinitySymbol、 NaNSymbol 或 NumberFormatInfo 属性的值。
下面的示例使用 en-US 区域性和所有标准数字格式说明符设置一个整型数值和一个浮点型数值的格式。 此示例使用两个特定的数值类型( Double 和 Int32),但对于任何一个其他数值基类型( Byte、 SByte、 Int16、 Int32、 Int64、 UInt16、 UInt32、 UInt64、 BigInteger、 Decimal 和 Single)都将产生类似的结果。
using System; using System.Globalization; using System.Threading; public class NumericFormats { public static void Main() { // Display string representations of numbers for en-us culture CultureInfo ci = new CultureInfo("en-us"); // Output floating point values double floating = 10761.937554; Console.WriteLine("C: {0}", floating.ToString("C", ci)); // Displays "C: $10,761.94" Console.WriteLine("E: {0}", floating.ToString("E03", ci)); // Displays "E: 1.076E+004" Console.WriteLine("F: {0}", floating.ToString("F04", ci)); // Displays "F: 10761.9376" Console.WriteLine("G: {0}", floating.ToString("G", ci)); // Displays "G: 10761.937554" Console.WriteLine("N: {0}", floating.ToString("N03", ci)); // Displays "N: 10,761.938" Console.WriteLine("P: {0}", (floating/10000).ToString("P02", ci)); // Displays "P: 107.62 %" Console.WriteLine("R: {0}", floating.ToString("R", ci)); // Displays "R: 10761.937554" Console.WriteLine(); // Output integral values int integral = 8395; Console.WriteLine("C: {0}", integral.ToString("C", ci)); // Displays "C: $8,395.00" Console.WriteLine("D: {0}", integral.ToString("D6", ci)); // Displays "D: 008395" Console.WriteLine("E: {0}", integral.ToString("E03", ci)); // Displays "E: 8.395E+003" Console.WriteLine("F: {0}", integral.ToString("F01", ci)); // Displays "F: 8395.0" Console.WriteLine("G: {0}", integral.ToString("G", ci)); // Displays "G: 8395" Console.WriteLine("N: {0}", integral.ToString("N01", ci)); // Displays "N: 8,395.0" Console.WriteLine("P: {0}", (integral/10000.0).ToString("P02", ci)); // Displays "P: 83.95 %" Console.WriteLine("X: 0x{0}", integral.ToString("X", ci)); // Displays "X: 0x20CB" Console.WriteLine(); } }
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/280445.html