You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lua中如何将数值四舍五入到指定小数位?

Lua 实现指定小数位的四舍五入

浮点数超长尾缀的显示问题,可以通过自定义四舍五入逻辑解决,不需要强制把数值取整为整数。
HP: 0.79200750000001/1.95 异常显示示例

实现原理

常见的整数四舍五入方案逻辑为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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 15:39:26