因此,在过去一小时左右的时间里,我一直遇到此功能的问题,使数字更容易阅读。 在当前状态下,该函数适用于长度低于6个字符的数字,如此。
1000,000
100,000
请原谅我的业余方式变量。
function neatnumber(number)
local nslen = string.len(tostring(number))
if nslen <= 3 then
return number
end
local ns = tostring(number)
local nslen = math.floor(string.len(ns) / 3)-1
for i=1,nslen do
neat = string.sub(ns,-#ns,#s-(3*i)) .. "," .. string.sub(ns,#ns-(2))
end
return neat
end
答案 0 :(得分:2)
可能有更优雅的方式,但您可以在循环中使用string.gsub
。
local function neatnumber(n)
local s, i = string.format('%0.f', n)
repeat
s, i = s:gsub('^(%-?%d+)(%d%d%d)', '%1,%2')
until i == 0
return s
end
gsub模式扫描字符串中的数字(可能是负数),查找连续的十进制数字,并捕获整个序列,直到最后三位数字。第二次捕获得到最后三位数。替换连接两个捕获并在。之间添加逗号。
这适用于任何大小的整数(正面或负面):
neatnumber(2^53) --> 9,007,199,254,740,992
neatnumber(-2^53) --> -9,007,199,254,740,992
答案 1 :(得分:2)
以下是使用string.gsub
但没有循环的类似解决方案:
function neatnumber(n, delim)
delim = delim or ','
n = ('%0.f'):format(n)
local groups = math.ceil(#n / 3) - 1
n = n:reverse()
n = n:gsub('(%d%d%d)', '%1' .. delim, groups)
return n:reverse()
end