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

以上。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值