在Lua中将格式字符串转换成最小长度的数字。
2014-4-21 12:19:48
收藏:0
阅读:141
评论:3
例如,我需要至少有 3 位数的数字
"512" --> 512
"24" --> 24.0
"5" --> 5.00
一个选项是编写一个小函数。对于我的情况,使用这里的答案,它会像这样:
function f(value, w)
local p = math.ceil(math.log10(value))
local prec = value <= 1 and w - 1 or p > w and 0 or w - p
return string.format('%.' .. prec .. 'f', value)
end
print(f(12, 3))
但是也许可以使用 string.format() 或任何其他简单的方法?
点赞
用户869951
由于 string.format 使用了 printf,并没有专门针对这种情况的格式代码(例如 *,如果有该符号,下面给出的解决方案就更加简便。)。因此您需要自己实现,例如:
function f(num, w)
-- 获取小数点前的数字个数
local intWidth = math.ceil(math.log10(num))
-- 如果 intWidth > w then ... end -- 或许需要
local fmt='%'..w..'.' .. (w-intWidth) .. 'f'
return string.format(fmt, num)
end
print(f(12, 4))
print(f(12, 3))
print(f(12, 2))
print(f(512, 3))
print(f(24, 3))
print(f(5, 3))
您应该处理整数部分不能适应字段宽度的情况(返回 ceil 或 floor?)。
2014-04-20 04:27:34
用户88888888
好的,看起来这个问题已经超出了 string.format 的能力范围。感谢 @Schollii 帮助,这是我目前的变体:
function f(value, w)
local p = math.ceil(math.log10(value))
local prec = value <= 1 and w - 1 or p > w and 0 or w - p
return string.format('%.' .. prec .. 'f', value)
end
print(f(12, 3))
2014-04-20 17:56:48
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
你无法强制输出与你的示例相同. 最多只能指定浮点精度或数字数量. Lua 使用类似于 C 的 printf 函数,带有少量限制 参考. 可在此处查看完整的说明符列表 链接. 记得不支持某些说明符.
编写一个函数是最佳且唯一的解决方案,特别是因为你的任务看起来很奇怪,因为它不计算小数点.