如何将第一个数字后面的所有数字替换为0?

已解决

我想将数字转换为熟悉的格式,例如,1000 将变成 1k,以此类推。我想让它一直保持到 qn 区域,我已经尝试过并解决了我遇到的问题,我试图将数字四舍五入到最接近的第一个数字。

例如,59127327 可以变成 60000000,然后我就可以将该值转换为 60M,使用 tostringgsub

因此,我实际上正在寻找一种算法,将第一个数字后的所有数字替换为0,同时保持整数的数字个数。

例子: 100000 -> 100k

我正在开发一款 roblox 游戏,其中有一种货币必须转换为上述熟悉的格式。谢谢!

点赞
用户10041320
用户10041320

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

因此,从技术上讲,我不需要更多的答案了,谢谢!

2018-07-20 23:41:35
用户369792
用户369792

假如我理解正确,你想要一个有效数字,可能后面跟着最多两个零,因此您将得到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)

nummagnitudeString 组合以获取结果:

local result = tostring(num)..magnitudeString

codepad 链接这里是一个链接 带有选项的函数以控制您想要的转换类型以及是否要四舍五入。

2018-07-22 00:42:12