大数字搞乱了吗?

时间:2016-05-14 01:23:22

标签: lua numbers

对于糟糕的头衔感到抱歉,我想不出更好的事情。所以我正在制作一个缩短数字(1000到1k)的功能,就在这里。

local letters = {
"K",
"M", --I'm too lazy to put more
"B",
"QD",
"QN",
}
local nums = {}

for q=1,#letters do
    local dig = (q*3)+1
    local letter = 1*(10^(dig-1))
    table.insert(nums,#nums+1,letter)
end


function shorten(num)
local len = tostring(num):len()
print(len)
if len>=4 then
    for q=1,#letters do
        local dig = (q*3)+1 --digits the letter is
        if len <= dig+2 then
            local toDo = math.floor(num/nums[q])
            print(nums[q])
            local newNum = toDo..letters[q]
            return newNum
            end
        end
    end
end

print(shorten(178900000000000))

然后打印。

10 --the length, and the real length of it is 15
1000000000 --the one to divide it
178900B --shortened num

我从打印件中取出一个零(缩短())并且它工作正常。我假设数字太大,或者代码可能存在问题。感谢您阅读本文。

1 个答案:

答案 0 :(得分:1)

tostring给出了人类可读的字符串表示形式,对于像您的示例中的大数字,它使用科学记数法:

print(tostring(178900000000000)) 

在Lua 5.2或更低版本中,结果为1.789e+14。在Lua 5.3中,由于新引入的整数子类型,结果如预期的那样178900000000000,但是对于更大的整数,它仍然会被破坏。