当前位置: 首页 > 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 中进行数字格式化时非常有用的工具。无论是简单地保留小数位数还是将较大的数字转换为易读的字符串表示,这些函数都能够轻松胜任。通过灵活地使用这些函数,我们可以更加方便地处理数字数据,为用户提供更好的体验。

相关文章:

Lua 数字格式化

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

Java入门基础学习笔记13——数据类型

数据类型的分类: 基本数据类型 引用数据类型 基本数据类型:4大类8种类型: 定义整形用int,再大的数用long。 package cn.ensource.variable;public class VariableDemo2 {public static void main(String[] args) {//目标&#x…...

使用Docker+Jar方式部署微服务工程(前后端分离)看着一篇就够了

本篇教程的使用到的技术有springboot、springcloud、Nacos、Docker、Nginx部署前后端分离访问的微服务。 部署一下Nacos 首先我们需要在服务器中(或者本地部署启动一下Nacos),这里我采用服务器的方式进行部署,这里有一点不一样的…...

红外遥控和LCD1602

26.1.1 红外线简介 人的眼睛能看到的可见光按波长从长到短排列,依次为红、橙、黄、绿、青、蓝、紫。其中红光的波长范围为 0.62~0.76μm;紫光的波长范围为 0.38~0.46μm。比紫光波长还短的光叫紫外线,比红光波长还长的…...

房屋出租管理系统需求分析及功能介绍

房屋租赁管理系统适用于写字楼、办公楼、厂区、园区、商城、公寓等商办商业不动产的租赁管理及租赁营销;提供资产管理,合同管理,租赁管理, 物业管理,门禁管理等一体化的运营管理平台,提高项目方管理运营效率…...

高精度模拟算法

高精度模拟算法 高精度加法 extern string m,n; extern int a[MAX],b[MAX],ans[MAX]; void addition(){int _mmax(m.size(),n.size());reverse(m.begin(),m.end()),reverse(n.begin(),n.end());//转置原字符串for(int i0;i<m.size();i) a[i]m[i]-0;//字符型以ASCII码存储&…...

Ansible简介版

目录 架构 环境部署 一、Ansible安装部署 1.yum安装Ansible 2.修改主机清单文件 3.配置密钥对验证 4.ansible-doc 5.看被控主机 二、常用模块 1.Command模块 2.Shell模块 3.Cron模块 1.添加 2.删除 4.User模块 5.Group模块 1.创建组 ​编辑 ​编辑 ​编辑…...

卷积通用模型的剪枝、蒸馏---蒸馏篇--RKD关系蒸馏(以deeplabv3+为例)

本文使用RKD实现对deeplabv3+模型的蒸馏;与上一篇KD蒸馏的方法有所不同,RKD是对展平层的特征做蒸馏,蒸馏的loss分为二阶的距离损失Distance-wise Loss和三阶的角度损失Angle-wise Loss。 完整代码放在文末。 一、RKD简介 RKD算法的核心是以教师模型的多个输出为结构单元,取…...

AVL树的完全指南:平衡与性能

文章目录 AVL树简介AVL的操作建立一个AVL树插入操作删除操作 书写代码1.构造函数和析构函数2.获取最大值和最小值3.树的高度和节点个数3.前序中序和后序遍历4.判断树是否为空树5.四个旋转操作6.获取平衡因子7.插入操作8.删除操作9.搜索节点.h文件中的定义 总结 AVL树简介 AVL树…...

itext7 PDF添加水印,获取页面高度,添加到页面右上角

ps: pdf添加水印&#xff0c;内容多的时候会往下跑&#xff0c;修改为获取当前页面高度&#xff0c;进行固定在顶部&#xff0c;其他需要可以自己进行调整&#xff0c;直接贴代码。 public static void main(String[] args) throws IOException {String localFilePath "…...

docker端口映射成功,docker端口不生效的问题解决,外界无法访问docker映射端口

docker端口映射不生效的问题解决 问题 使用docker run -p 88848:8848后&#xff0c;显示容器启动正常&#xff0c;并且使用docker logs –f xxx能够看到容器可以正常启用&#xff0c;docker ps 可以看到容器启动成功&#xff0c;并且端口已经映射,但是在浏览器访问相关地址&am…...

RSA非对称加密解密,前端公钥加密后端私钥解密

RSA非对称加密解密&#xff0c;前端公钥加密后端私钥解密&#xff0c;可以防止陌生人直接通过后端接口篡改数据。有数据泄露的风险。 前端&#xff1a;Vue框架 后端&#xff1a;sprintboot&#xff08;Java&#xff09; 工具类&#xff1a;hutool 前端Vue获取公钥&#xff1a…...

Nginx-01-Nginx 是什么? 能做什么?

nginx 系列 Nginx-01-聊一聊 nginx Nginx-01-Nginx 是什么 Nginx-02-为什么使用 Nginx Nginx-02-Nginx Ubuntu 安装 windows10 WSL ubuntu 安装 nginx 实战笔记 Nginx-02-基本使用 Nginx-03-Nginx 项目架构 Nginx-04-Docker Nginx Nginx-05-nginx 反向代理是什么&…...

最大数字——蓝桥杯十三届2022国赛大学B组真题

问题分析 这道题属于贪心加回溯。所有操作如果能使得高位的数字变大必定优先用在高位&#xff0c;因为对高位的影响永远大于对低位的影响。然后我们再来分析一下&#xff0c;如何使用这两种操作&#xff1f;对于加操作&#xff0c;如果能使这一位的数字加到9则变成9&#xff0…...

查看微信小程序主包大小

前言 略 查看微信小程序主包大小 在微信开发者工具右上角找到“详情->基本信息” 查看微信小程序主包构成 通过微信开发者工具中的“代码依赖分析”工具查看...

B树与B+树的奥秘:原理解析与性能

引言 B树和B树是计算机科学中两个重要的数据结构&#xff0c;它们在数据库和文件系统中扮演着至关重要的角色。在处理大量数据时&#xff0c;高效的数据组织和检索方式是至关重要的&#xff0c;而B树和B树正是为此而设计的。 B树和B树都是多路查找树的变体&#xff0c;它们通…...

Unity组件入门篇目录

Audio AudioChorusFilter......................................点击导航AudioDistortionFilter..................................点击导航AudioEchoFilter.........................................点击导航AudioHighPassFilter..................................点击导…...

【Python技术】使用akshare、pandas高效复盘每日涨停板行业分析

作为一个程序员宝爸&#xff0c;每天的时间很宝贵&#xff0c;工作之余除了辅导孩子作业&#xff0c;就是补充睡眠。 怎么快速高效的进行当天A股涨停板的复盘&#xff0c;便于第二天的跟踪。这里简单写个示例&#xff0c; 获取当天连涨数排序&#xff0c;以及所属行业排序。 …...

kubeflow文档-介绍与架构

1. kubeflow介绍 Kubeflow项目致力于使机器学习&#xff08;ML&#xff09;工作流在Kubernetes上的部署变得简单、可移植和可扩展。目标不是重新创建其他服务&#xff0c;而是提供一种直接的方法&#xff0c;将ML的开源系统部署到不同的基础设施中。无论在哪里运行Kubernetes&a…...

传输层的TCP流量控制比数据链路层作用范围更广

数据链路层的流量控制主要在相邻节点之间进行&#xff0c;它确保在单个链路或网络段上不会发生数据过载。例如&#xff0c;在以太网中&#xff0c;数据链路层使用停止-等待协议或滑动窗口机制来限制发送方发送的数据量&#xff0c;以避免接收方无法处理数据。 而传输层的 TCP 流…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...