引用lua的官方文档:
string.format (formatstring, ···)##
Returns a formatted version of its variable number of arguments following the description given in its first argument (which must be a string). The format string follows the same rules as the ISO C function sprintf
. The only differences are that the options/modifiers *, h, L, l, n, and p
are not supported and that there is an extra option, q
.
简单的说就是lua格式化字符串和 c sprintf (string print format)
遵循同样的规则,唯一的不同是修改了*, h, L, l, n
新增了q
选项。
sprintf
规则格式
%[指定参数][标识符][宽度][.精度]指示符
%% 印出百分比符号,不转换。
%c 整数转成对应的 ASCII 字元。
%d 整数转成十进位。
%f 倍精确度数字转成浮点数。
%o 整数转成八进位。
%s 整数转成字符串。
%x 整数转成小写十六进位。
%X 整数转成大写十六进位。
大神说过
Talk is cheap. Show me the code
local string_format_test = {
'string.format("%%")',
'string.format("%c", 48)',
'string.format("%d", 48)',
'string.format("%.2f", math.pi)',
'string.format("%.5o", math.pi)',
'string.format("%.5s", math.pi)',
'string.format("%x", 10)',
'string.format("%X", 10)'
}
for k, v in ipairs(string_format_test) do
local f = loadstring("return "..v)
print(tostring(v), "->", f())
end
输出:
string.format("%%") -> %
string.format("%c", 48) -> 0
string.format("%d", 48) -> 48
string.format("%.2f", math.pi) -> 3.14
string.format("%.5o", math.pi) -> 00003
string.format("%.5s", math.pi) -> 3.141
string.format("%x", 10) -> a
string.format("%X", 10) -> A