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	
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值