La visualización directa de una gran cantidad de números de monedas de oro en el juego dará como resultado un diseño de interfaz de interfaz de usuario atractivo, por lo que aquí debemos abreviar la cantidad de monedas.
como :
1000->1000
10000->10.0K
1000000->1.00M
1000000000->1.00B
1000000000000->1.00T
y abreviaturas similares.
Entonces, ¿cómo abreviar la gran cantidad de monedas de oro en el juego?
Aquí hay tres métodos escritos en lenguaje Lua, cada uno con sus propias ventajas y desventajas, según sus necesidades.
Yo uso el método dos.
método uno
---缩写金币方法一:
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
Método dos
---参考资料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
metodo tres
---参考资料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
Link de referencia: