游戏中金币数量大如何缩写

游戏中大量金币数字直接显示会导致UI界面排版好看,这里就要针对货币数量进行缩写。

如 :

1000->1000

10000->10.0K

1000000->1.00M

1000000000->1.00B

1000000000000->1.00T

等类似缩写。

那么游戏中金币数量大如何缩写。

这里使用Lua语言写的3种方法,各有优劣,看自己需求。

我用的是方法二。

方法一

---缩写金币方法一:
function FormatCoin_1(num)
    local str = ""
    local k = 1000
    local m = 1000000
    local b = 1000000000
    local t = 1000000000000

    if num >= t then
        str = string.format("%.1f", (num / t)) .. "T"
    elseif num >= b then
        str = string.format("%.1f", (num / b)) .. "B"
    elseif num >= m then
        str = string.format("%1.1f", (num / m)) .. "M"
    elseif (num >= k) then
        str = string.format("%.1f", (num / k)) .. "K"
    else
        str = num .. ""
    end
    return str
end

print(FormatCoin_1(233)) ---233
print(FormatCoin_1(1024)) ---1.0K
print(FormatCoin_1(1024102)) ---1.0M
print(FormatCoin_1(10241024)) ---10.2M
print(FormatCoin_1(10241024999)) ---10.2B
print(FormatCoin_1(999999999999999)) ---1000.0T

方法二

---参考资料2:https://baike.so.com/doc/5417760-5655908.html
function FormatCoin_2(num)
    local numStr = tostring(num)
    -- numStr = "1000000000000000"

    if num < 10000 then
        return tostring(num)
    end

    local splitVal, t2 = math.modf((string.len(numStr) - 1) / 3)
    local suffix = ""
    if splitVal == 0 then
        suffix = ""
    elseif splitVal == 1 then
        ---*1000 千
        suffix = "K"
    elseif splitVal == 2 then
        ---*1000000 百万 10^6
        suffix = "M"
    elseif splitVal == 3 then
        ---*1000000000 十亿  10^9
        suffix = "B"
    elseif splitVal == 4 then
        ---*1000000000000 万亿 10^12
        suffix = "T"
    elseif splitVal == 5 then
        ---*1000000000000000 千万亿 10^15
        suffix = "Qa"
    elseif splitVal == 6 then
        ---*1000000000000000000 百兆 10^18
        suffix = "Qi"
    elseif splitVal == 7 then
        ---*1000000000000000000000 十万兆 10^21
        suffix = "S"
    end

    local splitVal2 = string.len(numStr) % 3
    local str = ""
    if splitVal2 == 1 then
        str = string.sub(numStr, 1, 1) .. "." .. string.sub(numStr, 2, 2) .. string.sub(numStr, 3, 3) .. suffix
    elseif splitVal2 == 2 then
        str = string.sub(numStr, 1, 1) .. string.sub(numStr, 2, 2) .. "." .. string.sub(numStr, 3, 3) .. suffix
    elseif splitVal2 == 0 then
        str = string.sub(numStr, 1, 1) .. string.sub(numStr, 2, 2) .. string.sub(numStr, 3, 3) .. suffix
    end

    return str
end

print(FormatCoin_2(233)) ---233
print(FormatCoin_2(1024)) ---1024
print(FormatCoin_2(1024102)) ---1.02M
print(FormatCoin_2(10241024)) ---10.2M
print(FormatCoin_2(10241024999)) ---10.2B
print(FormatCoin_2(999999999999999)) ---1e+K

方法三

---参考资料2:https://baike.so.com/doc/5417760-5655908.html
function FormatCoin_3(num)
    ---{"","K.千.10^3","M.百万.10^6","B.十亿.10^9","T.万亿.10^12","Qa.千万亿.10^15","Qi.百兆.10^18","S.十万兆.10^21"}
    local CompanyArray = {"", "K", "M", "B", "T", "Qa", "Qi", "S"}
    local Result = ""
    local nIndex = 1
    local nStep = 1000
    while num > 0 do
        local tNum = math.floor(num % nStep)
        Result = string.format("%d%s %s", tNum, CompanyArray[nIndex], Result)
        num = math.floor(num / nStep)
        nIndex = nIndex + 1
    end
    return Result
end

print(FormatCoin_3(233)) ---233 
print(FormatCoin_3(1024)) ---1K 24
print(FormatCoin_3(1024102)) ---1M 24K 102
print(FormatCoin_3(10241024)) ---10M 241K 24
print(FormatCoin_3(10241024999)) ---10B 241M 24K 999
print(FormatCoin_3(999999999999999)) ---999T 999B 999M 999K 999

参考链接:

游戏中金币数量大如何缩写 - 简书方法一 方法二https://www.jianshu.com/p/202f9823404f

猜你喜欢

转载自blog.csdn.net/ZFSR05255134/article/details/128382533
今日推荐