Previous topicNext topic
Help > 开发指南 > 编程基础 > 格式化 >
数字格式化

数字格式化,是指将数值转换成方便阅读的显示格式。

格式化文本

类型说明

示例

正数示例
(
输入值
Double 1.42)

负数示例
(
输入值
Int -12400)

C/c

货币:数字转换为表示货币金额的字符串。转换由当前 NumberFormatInfo 对象的货币格式信息控制。

精度说明符指示所需的小数位数。如果省略精度说明符,则使用当前 NumberFormatInfo 对象给定的默认货币精度。

{0:c}

¥1.42

-¥12,400

D/d

十进制:只有整型才支持此格式。数字转换为十进制数字 (0-9) 的字符串,如果数字为负,则前面加负号。

精度说明符指示结果字符串中所需的最少数字个数。如果需要的话,则用零填充该数字的左侧,以产生精度说明符给定的数字个数。

{0:d}

不支持

-12400

E/e

科学计数法:数字转换为“-d.dddE+ddd”或“-d.ddde+ddd”形式的字符串,其中每个“d”表示一个数字 (0-9)。如果该数字为负,则该字符串以减号开头。小数点前总有一个数字。

精度说明符指示小数点后所需的位数。如果省略精度说明符,则使用默认值,即小数点后六位数字。

格式说明符的大小写指示在指数前加前缀“E”还是“e”。指数总是由正号或负号以及最少三位数字组成。如果需要,用零填充指数以满足最少三位数字的要求。

{0:e}

1.420000e+000

-1.240000e+004

F/f

定点:数字转换为“-ddd.ddd…”形式的字符串,其中每个“d”表示一个数字 (0-9)。如果该数字为负,则该字符串以减号开头。

精度说明符指示所需的小数位数。如果忽略精度说明符,则使用当前 NumberFormatInfo 对象给定的默认数值精度。

{0:f}

1.42

-12400.00

G/g

常规:根据数字类型以及是否存在精度说明符,数字会转换为定点或科学记数法的最紧凑形式。如果精度说明符被省略或为零,则数字的类型决定默认精度,如下表所示。如果用科学记数法表示数字时指数大于 -5 而且小于精度说明符,则使用定点表示法;否则使用科学记数法。如果要求有小数点,并且忽略尾部零,则结果包含小数点。如果精度说明符存在,并且结果的有效数字位数超过指定精度,则通过舍入删除多余的尾部数字。

上述规则有一个例外:如果数字是 Decimal 而且省略精度说明符时。在这种情况下总使用定点表示法并保留尾部零。

使用科学记数法时,如果格式说明符是“G”,结果的指数带前缀“E”;如果格式说明符是“g”,结果的指数带前缀“e”。

{0:g}

1.42

-12400

N/n

用千分位号隔开的数字:数字转换为“-d,ddd,ddd.ddd…”形式的字符串,其中“-”表示负数符号(如果需要),“d”表示数字 (0-9),“,”表示数字组之间的千位分隔符,“.”表示小数点符号。实际的负数模式、数字组大小、千位分隔符以及十进制分隔符由当前 NumberFormatInfo 对象指定。

精度说明符指示所需的小数位数。如果忽略精度说明符,则使用当前 NumberFormatInfo 对象给定的默认数值精度。

{0:n}

1.42

-12,400

P/p

百分比:已转换的数字乘以 100 以表示为百分比。

精度说明符指示所需的小数位数。如果忽略精度说明符,则使用当前 NumberFormatInfo 对象给定的默认数值精度。

{0:n}

142%

-1240000%

R/r

往返过程:只有 Single Double 类型支持此格式。往返过程说明符保证转换为字符串的数值再次被分析为相同的数值。使用此说明符格式化数值时,首先使用常规格式对其进行测试:Double 使用 15 位精度,Single 使用 7 位精度。如果此值被成功地分析回相同的数值,则使用常规格式说明符对其进行格式化。但是,如果此值未被成功地分析为相同数值,则它这样格式化:Double 使用 17 位精度,Single 使用 9 位精度。

虽然此处可以存在精度说明符,但它将被忽略。使用此说明符时,往返过程优先于精度。

{0:r}

1.42

不支持

X/x

十六进制: 只有整型才支持此格式。数字转换为十六进制数字的字符串。格式说明符的大小写指示对大于 9 的十六进制数字使用大写字符还是小写字符。例如,使用“X”产生“ABCDEF”,使用“x”产生“abcdef”。

精度说明符指示结果字符串中所需的最少数字个数。如果需要的话,则用零填充该数字的左侧,以产生精度说明符给定的数字个数。

{0:x4}

不支持

cf90

注意,我们可以通过在格式化字符后面添加数字来规定最终结果包含多少个小数点。

 Vb.Net
Dim decNums As Decimal=1454.2561D
'第一种,基于基础类型的ToString方法
Proj.MsgDebug.Add(decNums.ToString("C2")) '返回结果:¥1,454.26
'第二种,基于String.Format
Proj.MsgDebug.Add(String.Format("{0:C2}",decNums)) '返回结果:¥1,454.26
Proj.MsgDebug.Add(decNums.ToString("C")) '返回结果:¥1,454.26
Proj.MsgDebug.Add(decNums.ToString("c")) '返回结果:¥1,454.26
Proj.MsgDebug.Add(decNums.ToString("C2")) '返回结果:¥1,454.26
Proj.MsgDebug.Add(decNums.ToString("C3")) '返回结果:¥1,454.256
Proj.MsgDebug.Add(115.ToString("d")) '返回结果:返回整数的十进制115
Proj.MsgDebug.Add(115.ToString("D")) '返回结果:返回整数的十进制115
Proj.MsgDebug.Add(decNums.ToString("e")) '返回结果:1.454256e+003
Proj.MsgDebug.Add(decNums.ToString("E")) '返回结果:1.454256E+003
Proj.MsgDebug.Add(decNums.ToString("f")) '返回结果:1454.26
Proj.MsgDebug.Add(decNums.ToString("F")) '返回结果:1454.26
Proj.MsgDebug.Add(decNums.ToString("g")) '返回结果:1454.2561
Proj.MsgDebug.Add(decNums.ToString("G")) '返回结果:1454.2561
Proj.MsgDebug.Add(decNums.ToString("n")) '返回结果:1,454.26
Proj.MsgDebug.Add(decNums.ToString("N")) '返回结果:1,454.26
Proj.MsgDebug.Add(decNums.ToString("p")) '返回结果:145,425.61%
Proj.MsgDebug.Add(decNums.ToString("P")) '返回结果:145,425.61%
Proj.MsgDebug.Add(115.ToString("x4")) '返回结果:0073
Proj.MsgDebug.Add(115.ToString("X4")) '返回结果:0073

 C#
decimal decNums = 1454.2561M;
// 第一种,基于基础类型的ToString方法
Proj.MsgDebug.Add(decNums.ToString("C2")); // 返回结果:¥1,454.26
// 第二种,基于String.Format
Proj.MsgDebug.Add(string.Format("{0:C2}", decNums)); // 返回结果:¥1,454.26
Proj.MsgDebug.Add(decNums.ToString("C")); // 返回结果:¥1,454.26
Proj.MsgDebug.Add(decNums.ToString("c")); // 返回结果:¥1,454.26
Proj.MsgDebug.Add(decNums.ToString("C2")); // 返回结果:¥1,454.26
Proj.MsgDebug.Add(decNums.ToString("C3")); // 返回结果:¥1,454.256
Proj.MsgDebug.Add(115.ToString("d")); // 返回结果:返回整数的十进制115
Proj.MsgDebug.Add(115.ToString("D")); // 返回结果:返回整数的十进制115
Proj.MsgDebug.Add(decNums.ToString("e")); // 返回结果:1.454256e+003
Proj.MsgDebug.Add(decNums.ToString("E")); // 返回结果:1.454256E+003
Proj.MsgDebug.Add(decNums.ToString("f")); // 返回结果:1454.26
Proj.MsgDebug.Add(decNums.ToString("F")); // 返回结果:1454.26
Proj.MsgDebug.Add(decNums.ToString("g")); // 返回结果:1454.2561
Proj.MsgDebug.Add(decNums.ToString("G")); // 返回结果:1454.2561
Proj.MsgDebug.Add(decNums.ToString("n")); // 返回结果:1,454.26
Proj.MsgDebug.Add(decNums.ToString("N")); // 返回结果:1,454.26
Proj.MsgDebug.Add(decNums.ToString("p")); // 返回结果:145,425.61%
Proj.MsgDebug.Add(decNums.ToString("P")); // 返回结果:145,425.61%
Proj.MsgDebug.Add(115.ToString("x4")); // 返回结果:0073
Proj.MsgDebug.Add(115.ToString("X4")); // 返回结果:0073