Lua实战之number转带单位的字符串(万、亿)

Description

将number类型的数字转成指定格式的字符串!

规则如下:

  • 最多保留两位小数(舍去从第三位小数开始的值);

  • 大于等于1万,以万为单位。大于等于1亿,以亿为单位。

e.g.

0.009 -> 0

-88.8 -> -88.8

123.456 -> 123.45

-888.888 -> -888.88

1234000 -> 123.4万

-8888888 -> -888.88万

12300000000 -> 123亿

-88888888888 -> -888.88亿

Implemention

local LogManager = require("LogManager")

function getFormatNumStr(targetNum)
    local num = tonumber(targetNum)
    if not num then
        print(string.format("Error: %s is a fault input !!!", targetNum))
        return targetNum
    end
    if math.abs(num) >= 10^8 then
        if num % 10^8 == 0 then
            return tostring(num / 10^8) .. "亿"
        else
            local transNum = math.modf(num / 10^6)
            return tostring(transNum / 100) .. "亿"
        end
    elseif math.abs(num) >= 10^4 then
        if num % 10^4 == 0 then
            return tostring(num / 10^4) .. "万"
        else
            local transNum = math.modf(num / 100)
            return tostring(transNum / 100) .. "万"
        end
    else
        if num % 1 == 0 then
            return tostring(num)
        else
            local transNum = math.modf(num * 100)
            return tostring(transNum / 100)
        end
    end
end

local testRetTbl = {
    getFormatNumStr("Hello fightsyj"),
    getFormatNumStr(0.009),
    getFormatNumStr(-88.8),
    getFormatNumStr(123.456),
    getFormatNumStr(-888.888),
    getFormatNumStr(1234000),
    getFormatNumStr(-8888888),
    getFormatNumStr(12300000000),
    getFormatNumStr(-88888888888)
}
LogManager:dump(testRetTbl, "testRetTbl")
--[[
Error: Hello fightsyj is a fault input !!!
- "testRetTbl" = {
-     1 = "Hello fightsyj"
-     2 = "0"
-     3 = "-88.8"
-     4 = "123.45"
-     5 = "-888.88"
-     6 = "123.4万"
-     7 = "-888.88万"
-     8 = "123亿"
-     9 = "-888.88亿"
- }
]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fightsyj

您的鼓励将是我分享的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值