stringFormat
New in version 1.30.21.
语法
stringFormat(format, [args…])
参数
format 包含0个或多个占位符的字符串。
args… 可选参数,1个或多个填入格式化字符串的值。若指定,则其数量和数据类型必须与 format 中的占位符的数量和类型一致。若不指定,则直接输出 format。
详情
对字符串进行格式化处理,即将用户传入的值按指定的格式进行处理后填充到字符串中。在占位符内部,可以通过格式符指定进制格式、字段宽度、精度、对齐方式等选项,以便对输出进行更精确的控制。
表一:占位符支持的数据类型列表
类型 | 占位符(%数据类型符号) | args 示例 |
---|---|---|
BOOL | %b | 1b, 0b, true, false |
CHAR | %c | 'a', 97c |
SHORT | %h | 122h |
十进制整数(INT) | %i | 21 |
八进制整数 | %o | 31 |
十六进制整数(小写) | %x | 2f |
十六进制整数(大写) | %X | 2F |
LONG | %l | 25l |
DATE | %d | 2022.01.01 |
MONTH | %M | 2022.05M |
TIME | %t | 13:00:10.706 |
MINUTE | %m | 13:30m |
SECOND | %s | 13:30:10 |
DATETIME | %D | 2012.06.13 13:30:10, 2012.06.13T13:30:10 |
TIMESTAMP | %T | 2012.06.13 13:30:10.008, 2012.06.13T13:30:10.008 |
NANOTIME | %n | 13:30:10.008007006 |
NANOTIMESTAMP | %N | 2012.06.13 13:30:10.008007006, 2012.06.13T13:30:10.008007006 |
FLOAT | %f | 2.1f |
DOUBLE | %F | 2.1 |
SYMBOL | %S | symbol(["aaa", "bbb"]) |
STRING | %W | "Hello" |
ANY(元组) | %A | (1, 45, 'sah') |
注意:若字符串包含 “%” ,则须通过百分号进行转义,即写为 “%%” 。
在占位符内部(即在%
与数据类型符号之间)插入一个或多个格式化操作符,对输出格式进行控制,书写形式为 %[(var)][#][±][0][m/*][.][n/*]数据类型符号
。
表二:以小数点为分隔,下表解释小数点前的部分支持的符号:
符号 | 功能 | 用法示例 |
---|---|---|
m (一个正整数) | 支持在 %f, %F, %W 中使用。 - 当占位符类型是 f 或 F 时,表示输出字符串的最小总宽度,默认使用空格填充宽度。 当 m 小于浮点数实际位数时,输出完整的浮点数(保留至小数点后六位); 当 m 大于浮点数实际位数时,默认填充空格。 - 当占位符类型是 W 时,表示输出字符串的最小位数:当 m 小于字符串长度时, 输出完整的字符串;当 m 大于字符串长度时,默认填充空格。 默认对齐方式为右对齐。 |
stringFormat("%10f", pi) 输出: ··3.141593 stringFormat("%2f", 12345.0) 输出: 12345.000000 stringFormat("%10W", "6chars") 输出: ····6chars |
* | 与 m 功能类似,通过参数(args)指定输出字符串的宽度。 在对应的 args 中指定具体宽度数值,形式为一个元组: (宽度值,格式化字符串) 。 |
定义宽度:stringFormat("%*f", (10,pi)) 输出:`··3.141593` |
0 | 当宽度不足时,在输出的字符串前填充“0”来实现指定宽度(左对齐时,从右边开始 填充)。若不指定,则使用空格填充。 |
stringFormat("%010f", pi) 输出: 003.141593 |
- | 左对齐,仅适用于数值类型。若不指定该符号,则默认为右对齐。 | stringFormat("%-10.3f", pi) 输出: 3.142 |
+ | 在正数前显示加号(+)。 | stringFormat('%+f', pi) 输出: +3.141593 |
(var) | 映射变量,var 只能是字典形式。不可与其他操作符混用。 | employee = {"name":"Lisa Mill", "year":2010} stringFormat("%(name)W joined the company in %(year)i", employee) 输出: Lisa Mill joined the company in 2010 |
# | 在八进制数前显示 “0o”; 在十六进制前显示 ”0x“ (当数据类型符号为 “x“时)或者 “0X”(当数据类型符号为 “X” 时)。 |
stringFormat("%#o", 33) 输出: 0o41 stringFormat("%#X", 33) 输出: 0X21 |
表三:小数点后的部分支持的符号(仅支持在 %f, %F 和 %W 中使用):
符号 | 功能 | 用法示例 |
---|---|---|
n(一个正整数) | - 当占位符类型是 f 或 F 时,表示小数点后保留位数。若 n 小于浮点数的小数位数, 则会将浮点数四舍五入至指定位数; 若该数字大于浮点数的小数位数,则会补零对齐。 - 当占位符类型是 W 时,表示保留字符串位数。n 小于字符串长度时对字符串截断, 大于字符串长度时不补充。 |
stringFormat("%10.5f", pi) 输出: ···3.14159 stringFormat('%10.3f' , 3.1) 输出: ·····3.100 stringFormat("%2.10W", "6chars") 输出: 6chars |
* | 与 n 功能类似,在对应的 args 中指定输出字符串的小数点后的位数,形式为一个元组:([宽度], [精度值], 格式化字符串的值) 。 |
定义小数点后位数:stringFormat("%.*f", (5,pi)) 输出: 3.14159 同时定义宽度与小数点位数: stringFormat("%0*.*f", (10,5,pi)) 输出: ···3.14159 |
例子
$ stringFormat("date: %d, time: %t", 2022.12.01, 10:12:45.065)
date: 2022.12.01, time: 10:12:45.065
$ stringFormat("Students account for %i%% of our customers.", 50)
Students account for 50% of our customers.
$ t = datetime(now())
$ stringFormat("The current time is %D.", t)
The current time is 2023.01.02T20:36:03.
$ a = 7.596
$ stringFormat("%-+10.5f", a)
+7.59600
$ stringFormat("%010.3f", a)
000007.596
$ product = {"item":"Eggs", "price_per_unit":2}
$ stringFormat("%(item)W: $ %(price_per_unit)i", product)
Eggs: $ 2