标准数字格式字符串
标准数字格式字符串
注:本文测试使用中文环境,即culture
参数默认使用zh-CN
。
概述
标准数字格式字符串用于格式化通用数值类型。标准数字格式字符串采用[format specifier][precision specifier]
的形式:
[format specifier]
格式说明符是指数字格式类型(例如货币或百分比)的单个字母字符。任何包含一个以上的字母字符(包括空白)的数字格式字符串都会被解释为自定义数字格式字符串。[precision specifier]
精度说明符是一个可选整数,它影响生成的字符串中的位数。精度说明符控制数字的字符串表示形式中的数字个数。
当精度说明符控制结果字符串中的小数位数时,结果字符串将体现为一个数字,这个数字是舍入为最接近无限精度结果的可表示结果。
Number.ToText
函数支持标准格式字符串。
标准格式说明符
下表为标准数字格式说明符以及简单的示例,后续章节还有具体的说明和示例。
注意:
- 为了简化演示,下表示例列中
数字(参数1, 参数2)=结果
表示Number.ToText(数字, 参数1, 参数2)
执行后会得到结果
。 - 官方资料的部分内容在实际测试时并不支持的,没有在下表展示。
- 下表中格式说明符的大小写会影响输出结果中字母的大小写,如:
e
、x
。
注意
指定区域性(culture)可能会影响结果。区域性会受操作系统设置、用户设置、环境变量等影响。
格式说明符 | 名称 | 说明 | 示例 |
---|---|---|---|
C 、c | 货币 | 结果:表示货币金额的字符串 支持:所有数值类型 精度说明符:小数位数 默认精度说明符:由区域性定义 | 0.55("c1")=¥0.6 -1.234567("c", "zh-CN")=¥-1.23 -1.234567("c", "en-US")=($0.12) -1.234567("c", "ja-JP")=(-¥1) |
D 、d | 整数 | 结果:整数文本 支持:仅整数 精度说明符:整数位数 默认精度说明符:由输入值位数决定 | -10000("d")=-10000 0.0("d3")=000 (0.0等效于0)-10000("d6")=-010000 |
E 、e | 指数、科学记数 | 结果:指数(科学)表示法 支持:所有数值类型 精度说明符:小数位数 默认精度说明符:6 | 1234.56789("e", "fr-FR")=1,234568e+003 1234.56789("e", "en-US")=1.234568e+003 0.45("e")=4.500000e-001 |
F 、f | 定点 | 结果:整数 支持:所有数值类型 精度说明符:小数位数 默认精度说明符:由区域性定义 | 实际仅支持指定小数位数。0("f")=0.00 -1234.56789("f")=-1234.568 -1234.56789("f", "fr-FR")=-1234,568 |
G 、g | 常规 | 结果:更紧凑的f 或e 支持:所有数值类型 精度说明符:小数位数 默认精度说明符:由输入值位数和小数位决定 | -1234.56789("g")=-1234.56789 0.45("g")=0.45 1e29("g")=-1e+29 1234.56789("g2")=1.2e+03 1234.56789("g4")=1235 |
N 、n | 数字 | 结果:可能带分隔符和小数 支持:所有数值类型 精度说明符:小数位数 默认精度说明符:由区域性定义 | -1234.56789("n")=-1,234.57 0("n")=0.00 -0.45("n4")=-0.4500 |
P 、p | 百分比 | 结果:数字乘以100 并添加% 支持:所有数值类型 精度说明符:小数位数 默认精度说明符:由区域性定义 | -0.123456("p")=-12.35% -0.123456("p0")=-12% |
X 、x | 十六进制 | 结果:十六进制字符串 支持:整数 精度说明符:整数位数 默认精度说明符:无 | -5("x")=fffffffffffffffb 9e18("x")=7ce66c50e2840000 100("x6")=000064 |
使用标准数字格式字符串
标准数字字符串可用于定义数值文本的格式,使用时将其传给Number.ToText
函数的二参format
,同时你可能还需要使用三参culture
。
数字格式字符串的大小写会影响输出结果中的字母大小写,如X
输出的十六进制字母全部是大写,x
则全是小写。
警告
在数字转为文本进行舍入时,并不是按照M的默认规则,请务必注意。
Number.Round(0.45, 1)
输出0.4
Number.ToText(0.45, "f1")
输出0.5
如果输出的字符串包含千分位或小数时,结果会受到区域性设置影响。
警告
有些国家和地区使用,
作为小数点,使用.
作为千分位符号。
需要额外指出的是:与编程中指定格式不同,编程语言中有些标准格式字符串支持同时指定整数位数和小数位数,但Number.ToText
函数将会视情况只支持其中一种。比如编程语言中f2.4
表示整数2位,小数4位,而Number.ToText
函数只支持f4
,即小数4位。如果需要保证整数位数或其它需要对其的情况,可以使用Text.PadStart
函数或Text.PadEnd
函数来对齐。
货币格式说明符(C)
货币格式说明符会将数字转换为表示货币金额的字符串。
精度说明符指定结果中的小数位数,如果不指定则受区域性设置影响,如zh-CN
为两位小数,ja-JP
无小数。
如果指定的小数位后一位是大于或等于5的数字,那么会使用“远离零”(即传统意义上的四舍五入,而M默认使用银行家舍入法)的方式舍入。
结果会受到区域性设置影响。
整数格式说明符(D)
整数格式说明符将整数转为字符串,如果是负数则会在前面添加负数。
精度说明符指定整数的最小位数,如果输入值低于指定的位数,则会在最前面添加0(如果是负数则在负号之后),最终保证数字位数(不含负号)大于或等于指定位数。
指数格式说明符(E)
指数说明符将数字转为d.dd...Eddd
的形式,每个d
表示一个数字,且小数点之前有且仅有一个数字。负数会在前面添加-
。
精度说明符指定小数点之后的位数,默认为6位。
使用E
或e
唯一的区别是:输出结果中使用E
还是e
。
定点格式说明符(F)
定点格式说明符将数字转为ddd.ddd...
形式的字符串,其中每个d
表示一个数字。负数会在前面添加-
。
精度说明符指定小数位数,默认为2位小数。
结果会受到区域性设置影响。
常规格式说明符(G)
常规格式说明符根据数字类型和精度说明符,将数字转为更加紧凑的定点表示法(F
)或科学记数法(E
)。
精度说明符指定结果字符串的最大小数位。如果忽略或为0则取决于默认精度。
常规格式说明符使用何种方式输出和数字格式有关。
- 未转换类型的
(1e-29, 1e29)
、(-1e29, -1e-29)
会使用原始输出,否则使用科学记数法。 - 使用
Decimal.Type
转换后,始终使用原样输出,但超过(1e-29, 1e29)
、(-1e29, -1e-29)
范围的数值会报错。 - 使用
Double.Type
时,小数大于4位(整数为0且整数和小数点后大于3个0,即0.0000)时使用科学记数法;整数位大于28位时使用科学记数法。 - 使用
Single.Type
时,由于精度问题,小数和Double.Type
一致,但整数超过11位后会有精度损失。
如果结果使用科学记数法,使用G
或g
会影响科学记数法使用E
还是e
。
结果会受到区域性设置影响。
数字格式说明符(N)
数字格式说明符将数字转为d,...ddd.ddd...
形式的字符串,每个d
表示一个数字,,
表示组分隔符(千分位符号),.
表示小数点,负数会在前面添加-
。
精度说明符指定小数位数,默认位数与区域性设置有关。
结果会受到区域性设置影响。
百分比格式说明符
百分比格式说明符将数字乘以100并在设置精度后的结尾添加%
。
精度说明符只是所需的小数位数,默认位数与区域性设置有关。
结果会受到区域性设置影响。
十六进制格式说明符(X)
十六进制说明符将数字转为十六进制字符串。超过9的数字使用ABCDEF
表示10-15。
仅支持整数(负数会将其补码转为十六进制)。
使用X
或x
将决定结果使用ABCDEF
还是abcdef
。
其它说明
如果输入#infinity
、-#infinity
或#nan
,则会根据区域性设置返回对应的字符串,通常是∞
、-∞
、NaN
。