如何将第一个数字后面的所有数字替换为0?
已解决
我想将数字转换为熟悉的格式,例如,1000 将变成 1k,以此类推。我想让它一直保持到 qn 区域,我已经尝试过并解决了我遇到的问题,我试图将数字四舍五入到最接近的第一个数字。
例如,59127327 可以变成 60000000,然后我就可以将该值转换为 60M,使用 tostring 和 gsub。
因此,我实际上正在寻找一种算法,将第一个数字后的所有数字替换为0,同时保持整数的数字个数。
例子: 100000 -> 100k
我正在开发一款 roblox 游戏,其中有一种货币必须转换为上述熟悉的格式。谢谢!
假如我理解正确,你想要一个有效数字,可能后面跟着最多两个零,因此您将得到1-3个数字和一个科学计数法符号以在末尾显示。
首先,如 @fvu 的评论中所述,您可以使用 math.log10 获取数字中数字的位数作为整数部分,小数部分将是介于0和10之间的数字。您可以使用 'math.modf' 将这些部分分离。在 lua 中:
local int, frac = math.modf(math.log10(value))
-- 7, 0.77178824606507 for 59127327
数量级是千的数量,因此将整数部分除以3即可。除数就是多余的零。例如,有7个数字的示例具有大小为2(1,000,000)的量级和1个多余的零(7-2 x 3):
local magnitude = math.floor(int / 3)
local zeroes = int - magnitude * 3
现在,将10提高到小数部分的幂将得到您的数字。如果您想要四舍五入而不是截断,则在将其取整之前添加0.5(样本应该是60m,对吧?),然后再添加多余的零:
local digit = math.floor(math.pow(10, frac) + 0.5)
local num = digit * math.pow(10, zeroes)
如果您想要所有已显示数字都是有效的(即 '59m' 而不是 '60m'),则应在将10取幂之前将 zeroes 添加到 frac:
local num = math.floor(math.pow(10, frac + zeroes) + 0.5)
接下来,使用数量级来获取一个字符串(如果未指定,默认为指数符号):
local powers = {[0]='', 'k', 'm', 'b', 't'}
local magnitudeString = powers[magnitude]
magnitudeString = magnitudeString or 'e'..tostring(magnitude)
将 num 与 magnitudeString 组合以获取结果:
local result = tostring(num)..magnitudeString
codepad 链接,这里是一个链接 带有选项的函数以控制您想要的转换类型以及是否要四舍五入。
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的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 代码?

我没有完全使它与我的脚本兼容,但是因为我找到了一个可靠的解决方案,我只需要在数字之间加一个字符,例如每3个数字之间的 **,**,我就能完成它了。
因此,从技术上讲,我不需要更多的答案了,谢谢!