自定义数字格式字符串
2024年12月22日大约 6 分钟
自定义数字格式字符串
注:本文测试使用中文环境,即culture
参数默认使用zh-CN
。
自定义数字格式字符串基本上同Excel公式,很明确的一点区别是:PQ不支持颜色。
注:
- 为了简化演示,下表示例列中
数字(参数1, 参数2)=结果
表示Number.ToText(数字, 参数1, 参数2)
执行后会得到结果
。
格式说明符 | 名称 | 说明 | 示例 |
---|---|---|---|
0 | 0占位符 | 如果对应位置没有数字则使用0代替,即保证至少存在对应位数个数字。 | 0.45("000")=000 0.45(".0")=.5 123456.789(".0")=123456.8 |
# | 数字占位符 | 如果对应位置没有数字则什么都不做。 | 0.45("###")= (空字符串)0.45(".#")=.5 -1.234567("###.#")=-1.2 -0.123("###.#")=-.1 |
. | 小数点 | 确定小数点在结果字符串中的位置。 | |
, | 组分隔符和数字比例换算 | 用作分组时,只需要指定一组即可。也可作为除以1000使用。 | 1234567.89("#,#.000")=1,234,567.890 123456789012("0,,.00")=123456.79 |
% | 百分比占位符 | 将数字乘以100,并添加本地化百分比符号。 | -0.123456("0.00%")=-12.35% 0.55("0.%")=55% |
‰ | 千分比占位符 | 将数字乘以1000,并添加本地化千分比符号。 | -0.123456("0.00%")=-123.46% 0.55("0.%")=550% |
E0 、e0 E+0 、e+0 E-0 、e-0 | 指数表示法 | + 表示始终显示正负,不写符号或- 表示仅在负指数前添加负号。 | -1234.56789("##.##e-00")=-12.35e02 0("##.##e-00")=00e00 1.234567("0.00e+00")=1.23e+00 |
\ '' " | 转义符 | 对文字进行转义,即保持转义符后一个字符的原始内容。 单、双引号之间的文本会保持原义,如果只写一个,则表示之后的内容都转义。 | 1.234567("00\##0")=00#01 1.234567("00'#'#0")=00#01 1.234567("00"#"#0")=00#01 1.234567("00'##0")=01##0 |
'字符串' "字符串" | 转义字符串 | 单、双引号之间的文本会保持原义。 | 1.234567("00'#'#0")=00#01 1.234567("00"#"#0")=00#01 |
; | 部分分隔符 | 分隔正数、负数和零。 + 所有 + 正零;负 + 正;负;零 + 非零;;零 | 0.45("0.00;-0;0%")=0.45 -1.234567("0.00;-0;0%")=-1 |
自定义说明符(0)
自定义说明符0
用作零占位符,对应位置没有数字时会填充0,如果有数字则正常显示数字,简单的说就是保证至少显示0个数个数字。
//1234.57
Number.ToText(1234.5678, "00.00")
//001234.567800
Number.ToText(1234.5678, "000000.000000")
自定义说明符(#)
自定义说明符#
用作数字占位符,对应存在数字则显示数字,否则不会显示(也不会填充任何东西)任何东西。
//1234.57
Number.ToText(1234.5678, "##.##")
//1234.5678
Number.ToText(1234.5678, "######.######")
自定义说明符(.)
自定义说明符.
表示在对应位置插入本地化的小数点(不同国家可能使用不同符号作为小数点),仅从左往右的第一个小数点有效,之后的小数点都是无效的(忽略)。
// 1234.568
Number.ToText(1234.5678, "0.0.00")
//01234.5678
Number.ToText(1234.5678, "00000.00.00")
//01234,5678
Number.ToText(1234.5678, "00000.00.00", "fr-FR")
自定义说明符(,)
自定义说明符,
分为两种情况:
,
紧挨小数点左侧(显式或隐式小数点):每一个,
会将数字除以一次1000。- 当仅有整数时,隐式小数点位于最右侧,如
0,,
,此时数字会被除以1000000。 - 紧挨着右侧至少存在一个
0
或#
,否则不会除。
- 当仅有整数时,隐式小数点位于最右侧,如
- 其他情况下为组分隔符:为整数部分每千位(3位)添加一个本地化的组分隔符(不同国家可能使用不同符号作为组分隔符)
- 作为组分隔符,至少有一组
0,0
(0
可任意替换为#
),否则不会正常显示分组符号。
- 作为组分隔符,至少有一组
注:
- 用作小数点右侧时会被忽略。
//12,345,678,012.35
Number.ToText(12345678012.3456789, "0,0.00")
//12 345 678 012,35
Number.ToText(12345678012.3456789, "0,0.00", "fr-FR")
//12,345.68
Number.ToText(12345678012.3456789, "0,0,,.00")
//12345.68
Number.ToText(12345678012.3456789, "0,,.00")
//12345678012.35
Number.ToText(12345678012.3456789, ",,.00")
//隐式小数点
//12346
Number.ToText(12345678012.3456789, "0,,")
自定义说明符(%)
自定义说明符%
会将数字乘以100,并将本地化的百分比符号添加到对应位置(格式化文本中%出现的位置)。
//123.46%
Number.ToText(1.2345678, "0.00%")
//12345.68%%
Number.ToText(1.2345678, "0.00%%")
//0.12%
Number.ToText(1.2345678, "0,.00%")
自定义说明符(‰)
自定义说明符‰
(‰
或\u2030
)会将数字乘以1000,并将本地化的千分比符号添加到对应位置(格式化文本中%出现的位置)。
//1234.568‰
Number.ToText(1.2345678, "0.000‰")
//1234567.800‰‰
Number.ToText(1.2345678, "0.000‰‰")
自定义说明符(E)
如果E
、E+
、E-
、e
、e+
、e-
任意一个出现在字符串中,且后面紧跟至少一个0
,则使用科学记数法。正则表示为[Ee][+-]?\d+
。
//1E+011
Number.ToText(123456789012, "E0")
//1.235E11
Number.ToText(123456789012, "0.000E0")
//1.235E011
Number.ToText(123456789012, "0.000E000")
//1.235E+011
Number.ToText(123456789012, "0.000E+000")
//1.235E-006
Number.ToText(0.00000123456, "0.000E000")
自定义说明符(转义)
转义说明符将具有特殊含义的字符转为字面内容,如:#
、0
、%
等。转义说明符有三种:
- 反斜杠
\
:\
只能转义右侧紧挨着的单个字符。 - 英文双引号
"
:双引号能够将包围的内容全部转义,但需要注意的是在字符串中需要使用两个引号转义。 - 英文单引号
'
:单引号能够将包围的内容全部转义。
注:
- 单引号或双引号如果只写一个,那么将从引号位置开始到字符串结束都被转义。
//A123457##B
Number.ToText(123456.789, "A##.""##""B")
Number.ToText(123456.789, "A##.'##'B")
Number.ToText(123456.789, "A##.\#\#B")
//A123457###B
Number.ToText(123456.789, "A0'###B")
自定义说明符(;)
分号是条件格式说明符,它可以对数字应用不同的格式设置,具体取决于正、符还是零。它有三种形式:
部分数 | 说明 |
---|---|
一个 | 格式字符串应用于所有数字。 |
两个 | 两部分分别应用于:正数和零、负数。 如果要设置格式的数字为负数,但根据第二部分中的格式舍入后为零,则最终根据第一部分进行格式设置。 |
三个 | 三部分分别应用于:正数、负值、零。 第二部分可以设置为空,这种情况下,第一部分应用于所有非零值。 如果设置格式的数字为非零值,但根据第一第二部分格式舍入后为零,则最终的零根据第三部分进行格式设置。 |
请务必小心部分情况下会先根据舍入后的值进行格式设置,而不是原始值。
//0.00%
Number.ToText(0.45, "0;-0;0.00%")
//1
Number.ToText(0.55, "0;-0;0.00%")
其它说明
如果输入#infinity
、-#infinity
或#nan
,则会根据区域性设置返回对应的字符串,通常是∞
、-∞
、NaN
。