当前位置: 首页 > news >正文

Lua string.format() 使用整理

在使用 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%

相关文章:

  • 一个成功创业者的心得
  • Lua实战之以非科学记数法输出小数
  • SVN服务器的搭建与使用
  • 犹太人常说的理财故事
  • SVN设置强制注释才能提交
  • 35岁前成功的12条黄金法则
  • SVN比较两个文件差异
  • 李嘉诚传给年青人的人生忠告
  • 2021-1024程序员节
  • 成就富翁:赚钱八大定律
  • 安卓系统管理软件_【安卓软件】玩机必备综合型系统管理工具
  • 职业营销人的成长揭秘
  • 为什么Android项目mainactivity中有一个变量R_【Android 原创】日常破解从XCTF的app3题目简单了解安卓备份文件以及sqliteCipher加密数据库...
  • 备份文件的BAT脚本
  • unity animator 动画 结束后保持位移_使用 IKINEMA Orion 在 Unity 中进行全身动作捕捉...
  • [译] 怎样写一个基础的编译器
  • 【css3】浏览器内核及其兼容性
  • C++类的相互关联
  • gitlab-ci配置详解(一)
  • Java教程_软件开发基础
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Objective-C 中关联引用的概念
  • PermissionScope Swift4 兼容问题
  • Promise初体验
  • Python爬虫--- 1.3 BS4库的解析器
  • SSH 免密登录
  • storm drpc实例
  • 两列自适应布局方案整理
  • 判断客户端类型,Android,iOS,PC
  • 微信小程序开发问题汇总
  • 为什么要用IPython/Jupyter?
  • 一天一个设计模式之JS实现——适配器模式
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (13):Silverlight 2 数据与通信之WebRequest
  • (C++17) optional的使用
  • (备忘)Java Map 遍历
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (转)我也是一只IT小小鸟
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET CLR Hosting 简介
  • .net core 6 redis操作类
  • .net framework 4.0中如何 输出 form 的name属性。
  • .Net IE10 _doPostBack 未定义
  • .NET 读取 JSON格式的数据
  • .NET 发展历程
  • .NET 回调、接口回调、 委托
  • .Net程序帮助文档制作
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • @media screen 针对不同移动设备
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [AutoSar]BSW_Com02 PDU详解
  • [C/C++]数据结构 循环队列
  • [excel与dict] python 读取excel内容并放入字典、将字典内容写入 excel文件