数字太大有问题?

对于标题很抱歉,我没有想到更好的。所以我写了一个函数来缩短数字(比如将1000写成1k)。代码如下:

local letters = {
"K",
"M", --我太懒了,就只写这两个字母
"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 --数字的位数
        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 --数字的位数,实际长度为15
1000000000 --用于除以的数字
178900B --缩短后的数字

如果去掉 print(shorten()) 中的一个零,就能正常工作了。我猜数字太大了,或者代码有问题。感谢您的阅读。

点赞
用户1009479
用户1009479

tostring 函数会返回易于人们理解的字符串表示,对于像您例子中这样的大数字,它使用科学计数法:

print(tostring(178900000000000))

在 Lua 5.2 或更低版本中,结果为 1.789e+14。在 Lua 5.3 中,由于引入了整数子类型,结果与预期的 178900000000000 相同,但对于更大的整数仍会出现错误。

2016-05-14 02:08:51