lua 时间转换 与 数字保留指定小数位数

总结一下最近造成误会的地方,关于时间和时间戳转换的使用和关于lua保留指定小数位数,

首先是时间转换。

-- 转换成时间 【xxx小时xxx分xxx秒】 单位秒
function TimeUtil:FormatTimeString(time)
    if time and time >= 0 then
        local tb = { }
        tb.day = math.floor(time / 60 / 60 / 24)
        tb.hour = math.floor(time / 3600) % 24
        tb.min = math.floor(time / 60) % 60
        tb.sec = math.floor(time % 60)
        return tb
    end
end

这种适用于计算时差,然后做倒计时用。

---FormatTimeSpanToDate
---@param timeSpan number 10位的时间戳
function TimeUtil:FormatTimeSpanToDate(timeSpan)
    if timeSpan and timeSpan >= 0 then
        local tb = { }
        tb.year = tonumber(os.date("%Y",timeSpan))
        tb.mon =tonumber(os.date("%m",timeSpan))
        tb.day = tonumber(os.date("%d",timeSpan))
        tb.hour = tonumber(os.date("%H",timeSpan))
        tb.min = tonumber(os.date("%M",timeSpan))
        tb.sec = tonumber(os.date("%S",timeSpan))
        return tb
    end
end

这种是时间戳转成年月日,适用显示日期

--时间戳格式化
os.date("%Y-%m-%d %H:%M:%S", os.time())
--2022-02-11 16:22:24
os.date("%m月%d日%H:%M:%S", os.time())
--02月11日16:22:24
os.date("%Y%m%d%H%M%S",os.time())
--20220211162224

关于lua保留指定小数

--lua原本提供的保留n位小数的方法。此方法的误区在于保留时遵循四舍五入的原则。
--即 0.111显示为 0.11, 0.116显示为 0.12
string.format("%.2f", num)

以上保留方案适用于大部分问题解决方案。但在我们所做的战力数据的展示页面会出现这样的问题,在特殊情况下会出现不同模块战力相加大于总战力数据,这样就比较容易被误会。
于是需要一种向下取值的方案。即截取对应位数的数据即可。

--- 截取指定位数的数据
--- nNum 源数字
--- n 小数位数
function GameUtil:CustomFormatNum(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

以上。

    原文作者:Gipsyz
    原文地址: https://blog.csdn.net/qq_39860954/article/details/122882531
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞