Lua string.format() 使用整理

本文详细介绍了Lua编程中string.format()函数的使用,包括各种转义码如%d, %s, %e等,以及如何通过%符号后的参数调整格式,如宽度、对齐方式和小数位数等。示例丰富,帮助开发者更好地掌握字符串格式化技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用 Lua 进行实际开发的过程中,格式化字符串的函数 string.format() 的使用频率是非常高的,这里整理一下关于这个函数的使用。

参数解析

string.format(formatstring, ...)

formatstring 为格式化串(必须是一个字符串),其中可能包含多个转义码(例如最为常用的 %d %s 等)。

... 为数量不定的参数列表,以逗号分隔,与格式化串中的转义码一一对应。

返回值为格式化之后的字符串(string)。

e.g.

print(string.format("%s Have %d Olympic Gold Medals!", "Kevin Durant", 3))
-- Kevin Durant Have 3 Olympic Gold Medals!

转义码

格式化串中支持的转义码有以下这些:

%c

接收一个数字,并将其转化为 ASCII 码表中对应的字符。

print(string.format("%c", 65))  -- A
print(string.format("%c", 97))  -- a

%d

接收一个数字,并将其转化为有符号的整数格式。(%i%d 作用一致)

print(string.format("%d", 666))  -- 666
print(string.format("%d", -666))  -- -666

%e

接收一个数字,并将其转化为科学记数法格式, 使用小写字母 e

print(string.format("%e", 666))  -- 6.660000e+002
print(string.format("%e", -666))  -- -6.660000e+002

%E

接收一个数字,并将其转化为科学记数法格式, 使用大写字母 E

print(string.format("%E", 666))  -- 6.660000E+002
print(string.format("%E", -666))  -- -6.660000E+002

%f

接收一个数字,并将其转化为浮点数格式。

print(string.format("%f", 666))  -- 666.000000
print(string.format("%f", -666))  -- -666.000000

%g

接收一个数字,并将其转化为 %e%f 中较短的一种格式。

print(string.format("%g", 666666))  -- 666666
print(string.format("%g", -6666666))  -- -6.66667e+006

%G

接收一个数字,并将其转化为 %G%f 中较短的一种格式。

print(string.format("%G", 666666))  -- 666666
print(string.format("%G", -6666666))  -- -6.66667E+006

%o

接收一个数字,并将其转化为八进制数格式。

print(string.format("%o", 10))  -- 12
print(string.format("%o", 17))  -- 21

%q

接收一个字符串,并将其转化为可安全被 Lua 编译器读入的格式。

print(string.format('%q', 'Hello \n "fightsyj" !'))
-- "Hello \
--  \"fightsyj\" !"

%s

接收一个字符串,并按照给定的参数格式化该字符串。

print(string.format("Hello %s !", "fightsyj"))  -- Hello fightsyj !

%u

接收一个数字,并将其转化为无符号整数格式。

print(string.format("%u", 666))  -- 666
print(string.format("%u", -1))  -- 4294967295

关于上面示例中用 %u 格式化 -1 时输出一个很大的数的详解

%x

接收一个数字,并将其转化为十六进制数格式,使用小写字母。

print(string.format("%x", 15))  -- f
print(string.format("%x", 666))  -- 29a

%X

接收一个数字,并将其转化为十六进制数格式, 使用大写字母。

print(string.format("%X", 15))  -- F
print(string.format("%X", 666))  -- 29A

转义码参数

为进一步细化格式,还可以在转义码的 % 后添加参数:

+

表示其后的数字转义码将让正数显示正号。(默认情况下只有负数显示符号)

print(string.format("%d", -666))  -- -666
print(string.format("%d", 666))  -- 666
print(string.format("%+d", -666))  -- -666
print(string.format("%+d", 666))  -- +666

0

在后面指定了字串宽度时占位用(不填时的默认占位符是空格)。

print(string.format("%d", 666))  -- 666
print(string.format("%5d", 666))   --   666
print(string.format("%05d", 666))  -- 00666

-

在指定了字串宽度时,默认为右对齐,增加 - 可以改为左对齐。

print(string.format("%d", 666))  -- 666
print(string.format("%5d", 666))  --   666
print(string.format("%-5d", 666))  -- 666  

.

当转义码是 %f 时,后接数字 n,标明保留的 n 位小数;
当转义码是 %s 时,后接数字 n,标明显示前面 n 位。

-- %f
print(string.format("%f", 666))  -- 666.000000
print(string.format("%0.2f", 666))  -- 666.00
print(string.format("%.2f", 666))  -- 666.00

-- %s
print(string.format("%s", "Hello"))  -- Hello
print(string.format("%0.2s", "Hello"))  -- He
print(string.format("%.2s", "Hello"))  -- He

ps

  • 转义码中添加参数的顺序为:%[指定参数][标识符][宽度][.精度]指示符。
  • 使用 string.format() 输出 % 需要用 %%

e.g.

print(string.format("%d%%", 50))  -- 50%
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fightsyj

您的鼓励将是我分享的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值