Lua 数字格式化

在编程中,对数字进行格式化是一项常见的任务,特别是当我们需要在用户界面中显示数据或生成报告时。在 Lua 中,我们可以使用一些简单而有效的函数来实现数字的格式化。在本文中,我们将介绍一个由几个函数组成的小型 Lua 库,用于数字格式化。

1. 核心函数介绍

FormatNumber(number, decimalPlaces) 

这个函数接收一个数字和一个小数点位数,然后将数字格式化为指定小数位数的浮点数。它通过在小数点后四舍五入来实现精确度控制。

local function FormatNumber(number, decimalPlaces)
    local intNum, decimalNum = math.modf(number)
    for i = 1, decimalPlaces do
        intNum = intNum + (math.floor(decimalNum * 10) / (10 ^ i))
        decimalNum = decimalNum * 10 - math.floor(decimalNum * 10)
    end

    return intNum
end
FormatWithScale(num, decimalPlaces)

这个函数用于将一个较大的数字转换为以万或亿为单位的字符串表示,同时保留指定的小数位数。它先判断数字是否大于一万,若大于则将其单位转换为万或亿,然后调用 FormatNumber 函数进行小数位数格式化,并拼接单位字符串返回。

local function FormatWithScale(num, decimalPlaces)
    local unitIndex = 1
    local units = {'', '万', '亿'}

    while num >= 1e4 do
        if unitIndex > #units then
            break
        end

        num = num / 1e4
        unitIndex = unitIndex + 1
    end

    num = FormatNumber(num, decimalPlaces)
    return string.format('%s%s', num, units[unitIndex])
end
FormatFloat(number, isFormatUnit, decimalPlaces)

这个函数是一个高级封装函数,用于根据需求格式化数字。它接收三个参数:待格式化的数字、一个布尔值指示是否需要格式化单位、以及小数位数。根据参数的不同,它可以将数字格式化为整数或带有单位的浮点数字符串。

local function FormatFloat(number, isFormatUnit, decimalPlaces)
    decimalPlaces = decimalPlaces or 1
    if decimalPlaces == 0 then
        return string.format('%d', number)
    end

    if isFormatUnit then
        return FormatWithScale(number, decimalPlaces)
    end

    number = math.floor(number + 0.5)
    return FormatNumber(number, decimalPlaces)
end

2. 使用示例

print(FormatFloat(123456789, true, 2)) -- 输出: "1.23亿" 
print(FormatFloat(9876543210, true, 3)) -- 输出: "9.877亿" 
print(FormatFloat(12345, true, 1)) -- 输出: "1.2万" 
print(FormatFloat(123.456789, false, 2)) -- 输出: "123.46" 
print(FormatFloat(987.654321, false, 0)) -- 输出: "988"

3.完整代码

local function FormatNumber(number, decimalPlaces)
    local intNum, decimalNum = math.modf(number)
    for i = 1, decimalPlaces do
        intNum = intNum + (math.floor(decimalNum * 10) / (10 ^ i))
        decimalNum = decimalNum * 10 - math.floor(decimalNum * 10)
    end

    return intNum
end

local function FormatWithScale(num, decimalPlaces)
    local unitIndex = 1
    local units = {'', '万', '亿'}

    while num >= 1e4 do
        if unitIndex > #units then
            break
        end

        num = num / 1e4
        unitIndex = unitIndex + 1
    end

    num = FormatNumber(num, decimalPlaces)
    return string.format('%s%s', num, units[unitIndex])
end

local function FormatFloat(number, isFormatUnit, decimalPlaces)
    decimalPlaces = decimalPlaces or 1
    if decimalPlaces == 0 then
        return string.format('%d', number)
    end

    if isFormatUnit then
        return FormatWithScale(number, decimalPlaces)
    end

    number = math.floor(number + 0.5)
    return FormatNumber(number, decimalPlaces)
end

print(FormatFloat(123456789, true, 2)) -- 输出: "1.23亿"
print(FormatFloat(9876543210, true, 3)) -- 输出: "9.877亿"
print(FormatFloat(12345, true, 1)) -- 输出: "1.2万"
print(FormatFloat(123.456789, false, 2)) -- 输出: "123.46"
print(FormatFloat(987.654321, false, 0)) -- 输出: "988"

3. 结语

以上介绍的这些函数是在 Lua 中进行数字格式化时非常有用的工具。无论是简单地保留小数位数还是将较大的数字转换为易读的字符串表示,这些函数都能够轻松胜任。通过灵活地使用这些函数,我们可以更加方便地处理数字数据,为用户提供更好的体验。

相关推荐

  1. Lua 数字格式化

    2024-05-11 09:08:02       12 阅读
  2. 04、Lua 数据类型

    2024-05-11 09:08:02       18 阅读
  3. 11、Lua 数组

    2024-05-11 09:08:02       19 阅读
  4. Lua中的数据类型:table

    2024-05-11 09:08:02       12 阅读
  5. 27、Lua 学习笔记之五(Lua中的数学库)

    2024-05-11 09:08:02       15 阅读
  6. EasyExcel自定义数据格式化

    2024-05-11 09:08:02       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-11 09:08:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-11 09:08:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-11 09:08:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-11 09:08:02       20 阅读

热门阅读

  1. 神经网络的偏见

    2024-05-11 09:08:02       10 阅读
  2. BS架构和CS架构的区别

    2024-05-11 09:08:02       11 阅读
  3. uni-app小知识点记录

    2024-05-11 09:08:02       10 阅读
  4. 【DL】FocalLoss的PyTorch实现

    2024-05-11 09:08:02       13 阅读
  5. IPsec协议:保障网络通信的安全利器

    2024-05-11 09:08:02       11 阅读
  6. [力扣题解]455. 分发饼干

    2024-05-11 09:08:02       9 阅读
  7. 每天一个数据分析题(三百一十七)-AB测试

    2024-05-11 09:08:02       14 阅读