Lua - 精确小数位数(四舍五入、去掉末尾0)

四舍五入

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
经验分享 程序员 微信小程序 职场和发展