四舍五入
function math.getPreciseDecimalRound(nNum, n)
n = n or 0;
n = math.floor(n)
if n < 0 then
n = 0;
end
local format = "%." .. n .. "f"
return string.format(format, nNum)
end
精确小数位数(去末尾0)
function math.getPreciseDecimalFloor(nNum, n)
if type(nNum) ~= "number" then
return nNum
end
n = n or 0
n = math.floor(n)
if n < 0 then
n = 0
end
local nDecimal = 10 ^ n
local nTemp = math.floor(nNum * nDecimal)
local nRet = nTemp / nDecimal
return nRet
end
数值转换
-- 转换数值
--[[
转换规则:
7位数以下全显示 X,XXX,XXX
8位数显示 XX,XXX K
9-12位数 XXX,XXX M
如果最终显示的 数字少于 5 位,就保留2位小数,否则不保留
--]]
function ConvertNumber(num,exactvalue)
num = tonumber(num)
exactvalue = exactvalue or 0;
if num < 0 then
return "0"
end
local newNum = ""
-- 小于五位数
if num < 10000 then
newNum = math.getPreciseDecimalFloor(num,exactvalue)
elseif num < 10000000 then
num = math.floor(num)
newNum = tostring(num)
else
local len = string.len(math.floor(num))
-- 八位数
if len == 8 then
num = num / 1000
-- 小于五位 保留两位小数
if string.len(math.floor(num)) < 5 then
num = math.getPreciseDecimalFloor(num,exactvalue)
else
num = math.floor(num)
end
newNum = num .. " K"
else
num = num / 1000000
if string.len(math.floor(num)) < 5 then
num = math.getPreciseDecimalFloor(num,exactvalue)
else
num = math.floor(num)
end
newNum = num .. " M"
end
end
return newNum
end
print(math.getPreciseDecimalFloor(12.115, 2)) -- 12.11
print(math.getPreciseDecimalRound(12.114, 2)) -- 12.11
print(math.getPreciseDecimalRound(12.115, 2)) -- 12.12
print(math.getPreciseDecimalFloor(12.10, 2)) -- 12.1
print(math.getPreciseDecimalRound(12.10, 2)) -- 12.10
print(ConvertNumber(1000000)) -- 1000000
print(ConvertNumber(10000000)) -- 10000 K
print(ConvertNumber(100000000)) -- 100 M