游戏中大量金币数字直接显示会导致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