当前位置: 首页 > news >正文

Lua 数字格式化

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

1. 核心函数介绍

FormatNumber(number, decimalPlaces) 

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

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

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

local function FormatWithScale(num, decimalPlaces)local unitIndex = 1local units = {'', '万', '亿'}while num >= 1e4 doif unitIndex > #units thenbreakendnum = num / 1e4unitIndex = unitIndex + 1endnum = 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 1if decimalPlaces == 0 thenreturn string.format('%d', number)endif isFormatUnit thenreturn FormatWithScale(number, decimalPlaces)endnumber = 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 dointNum = intNum + (math.floor(decimalNum * 10) / (10 ^ i))decimalNum = decimalNum * 10 - math.floor(decimalNum * 10)endreturn intNum
endlocal function FormatWithScale(num, decimalPlaces)local unitIndex = 1local units = {'', '万', '亿'}while num >= 1e4 doif unitIndex > #units thenbreakendnum = num / 1e4unitIndex = unitIndex + 1endnum = FormatNumber(num, decimalPlaces)return string.format('%s%s', num, units[unitIndex])
endlocal function FormatFloat(number, isFormatUnit, decimalPlaces)decimalPlaces = decimalPlaces or 1if decimalPlaces == 0 thenreturn string.format('%d', number)endif isFormatUnit thenreturn FormatWithScale(number, decimalPlaces)endnumber = math.floor(number + 0.5)return FormatNumber(number, decimalPlaces)
endprint(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 中进行数字格式化时非常有用的工具。无论是简单地保留小数位数还是将较大的数字转换为易读的字符串表示,这些函数都能够轻松胜任。通过灵活地使用这些函数,我们可以更加方便地处理数字数据,为用户提供更好的体验。

http://www.lryc.cn/news/348197.html

相关文章:

  • Java入门基础学习笔记13——数据类型
  • 使用Docker+Jar方式部署微服务工程(前后端分离)看着一篇就够了
  • 红外遥控和LCD1602
  • 房屋出租管理系统需求分析及功能介绍
  • 高精度模拟算法
  • Ansible简介版
  • 卷积通用模型的剪枝、蒸馏---蒸馏篇--RKD关系蒸馏(以deeplabv3+为例)
  • AVL树的完全指南:平衡与性能
  • itext7 PDF添加水印,获取页面高度,添加到页面右上角
  • docker端口映射成功,docker端口不生效的问题解决,外界无法访问docker映射端口
  • RSA非对称加密解密,前端公钥加密后端私钥解密
  • Nginx-01-Nginx 是什么? 能做什么?
  • 最大数字——蓝桥杯十三届2022国赛大学B组真题
  • 查看微信小程序主包大小
  • B树与B+树的奥秘:原理解析与性能
  • Unity组件入门篇目录
  • 【Python技术】使用akshare、pandas高效复盘每日涨停板行业分析
  • kubeflow文档-介绍与架构
  • 传输层的TCP流量控制比数据链路层作用范围更广
  • CSS表格
  • 东芝移动硬盘数据恢复方法有哪些
  • FullCalendar日历组件集成实战(1)
  • wps
  • 【软设】常见易错题汇总
  • 安全数据交换系统哪个好?该如何选型?
  • 用matplotlib制作代码和色块
  • centos无法tab补全至文件
  • 大模型训练框架DeepSpeed使用入门(1): 训练设置
  • 自定义类型——结构体、枚举和联合
  • Windows11系统安装Mysql8之后,启动服务net start mysql报错“服务没有响应控制功能”的解决办法