标准数字格式字符串
标准数字格式字符串
注:本文测试使用中文环境,即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")=-100000.0("d3")=000(0.0等效于0)-10000("d6")=-010000 |
E、e | 指数、科学记数 | 结果:指数(科学)表示法 支持:所有数值类型 精度说明符:小数位数 默认精度说明符:6 | 1234.56789("e", "fr-FR")=1,234568e+0031234.56789("e", "en-US")=1.234568e+0030.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.567890.45("g")=0.451e29("g")=-1e+291234.56789("g2")=1.2e+031234.56789("g4")=1235 |
N、n | 数字 | 结果:可能带分隔符和小数 支持:所有数值类型 精度说明符:小数位数 默认精度说明符:由区域性定义 | -1234.56789("n")=-1,234.570("n")=0.00-0.45("n4")=-0.4500 |
P、p | 百分比 | 结果:数字乘以100并添加%支持:所有数值类型 精度说明符:小数位数 默认精度说明符:由区域性定义 | -0.123456("p")=-12.35%-0.123456("p0")=-12% |
X、x | 十六进制 | 结果:十六进制字符串 支持:整数 精度说明符:整数位数 默认精度说明符:无 | -5("x")=fffffffffffffffb9e18("x")=7ce66c50e2840000100("x6")=000064 |
使用标准数字格式字符串
标准数字字符串可用于定义数值文本的格式,使用时将其传给Number.ToText函数的二参format,同时你可能还需要使用三参culture。
数字格式字符串的大小写会影响输出结果中的字母大小写,如X输出的十六进制字母全部是大写,x则全是小写。
警告
在数字转为文本进行舍入时,并不是按照M的默认规则,请务必注意。
Number.Round(0.45, 1)输出0.4Number.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。