Lua中如何将数值四舍五入到指定小数位?
Lua 实现指定小数位的四舍五入
浮点数超长尾缀的显示问题,可以通过自定义四舍五入逻辑解决,不需要强制把数值取整为整数。
实现原理
常见的整数四舍五入方案逻辑为math.floor(数值 + 0.5),要保留N位小数时,只需要先把待处理数值放大10^N倍,按整数逻辑四舍五入后,再缩小回原倍数即可。如果是用于UI文本显示,直接用字符串格式化的方式更简单,还能避免浮点数运算带来的精度误差。
通用四舍五入函数
-- 参数num为待处理数值,参数n为需要保留的小数位数,默认保留2位 function round(num, n) n = n or 2 local multiplier = 10 ^ n return math.floor(num * multiplier + 0.5) / multiplier end
修改后的完整业务代码
health = 1 maxhp = 2 function round(num, n) n = n or 2 local multiplier = 10 ^ n return math.floor(num * multiplier + 0.5) / multiplier end function hp_showcase() -- 如需调整保留位数,修改第二个参数即可,比如传1就是保留1位小数 local displayHealth = round(health, 2) local displayMaxHp = round(maxhp, 2) -- 如果需要固定显示小数位(比如整数1显示为1.00),可以注释掉上面两行,改用字符串格式化方案 -- local hpContent = string.format("HP: %.2f/%.2f", health, maxhp) local hpContent = "HP: "..displayHealth.."/"..displayMaxHp makeLuaText("hpcounter", hpContent, 2250, 30, 350) addLuaText("hpcounter") end function opponentNoteHit(id, noteData, noteType, isSustainNote) hp_showcase(); end
使用说明
- 不需要固定补全末尾0的场景,直接调用
round()函数即可,比如保留2位小数时,1会显示为1,0.7920075会显示为0.79 - 需要统一显示格式、固定小数位长度的场景,用
string.format("%.Xf", 数值)即可,X替换为需要保留的小数位数,比如%.2f就是保留2位,会自动补全末尾的0,显示更整齐 - 两种方案都会自动处理四舍五入逻辑,完全规避浮点数精度导致的超长小数尾缀问题。
内容的提问来源于stack exchange,提问作者Brave.
相关产品推荐
相关产品推荐

