CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
入门夯实996引擎fmod取模符号

【入门夯实】math.fmod与取余运算的差异:负数取模的符号规则

2026-09-25 11:34 作者:996 技术组 996引擎Lua教程传奇脚本入门夯实996引擎Luafmod取模符号

学员常见误区

取余运算 % 与 math.fmod 看似同物,负数输入时结果不同:Lua 的 % 结果符号跟随除数(结果补到非负),math.fmod 结果符号跟随被除数(保持负号)。学员用 % 做环状索引后传入负数,索引越界报错却找不到原因。错误场景:

lua
print(-7 % 3)
print(math.fmod(-7, 3))

% 输出 2(补到非负),fmod 输出 -1(保持符号)——两个"余数"差了整整一个除数。

正确姿势

需要非负的环状回绕用 %(配合 +1 转下标),需要带符号的数学余数用 fmod。规范写法。示例代码如下:

lua
local function ringIndex(i, n)
    return i % n + 1
end
print(ringIndex(-1, 5))
print(ringIndex(7, 5))

ringIndex(-1, 5) 得 5(负一正确回绕到末位),ringIndex(7, 5) 得 3(超出回绕)——环状索引对任意整数输入都安全。

引擎验证

三步验证:-7 % 3 得 2;math.fmod(-7, 3) 得 -1;正数输入时两者一致(7 % 3 与 fmod(7, 3) 都是 1)——差异只在负数出现,正数场景可互换。

举一反三

math.fmod 对浮点数同样适用,配合 floor 可截取小数的指定位。示例代码如下:

lua
print(math.fmod(7.5, 2))
print(math.floor(7.5 * 10) % 10)

fmod(7.5, 2) 得 1.5,floor 乘十取余得 5(小数点后首位数字)——浮点余数与位截取的组合常见于坐标与进度条计算。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

幂尔框架 · 实战干货 · 接口调用

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →