Lua替代%运算符的方法

44

我想要检查一个数字是否可被另一个数字整除:

for i = 1, 100 do
    if i % 2 == 0 then
        print( i .. " is divisible.")
    end
end

这应该没有任何问题,但是在我的 Lua 服务器上,如果脚本中有 %,则脚本不会运行……我不知道原因是什么,所以是否有任何“替代品”?这样我就可以检查数字可除性了吗?

谢谢。


1
服务器运行的Lua版本是什么? - Nicol Bolas
我认为它是5.0或更高版本 :S - Cyclone
6
听起来你可能遇到了编码问题;如果你能找出使用的编码方式,也许可以通过一些方法插入“%”符号。尝试使用'%%'、'%'或'%25'。 - Javier
我要对这个问题进行负评,因为我认为它提出的不是正确的问题:真正的问题应该是“为什么在Lua中不能正常工作”?根据Lua文档 Lua支持通常的算术运算符:二进制+(加法)-(减法)(乘法)/(除法)%(模数)和^(指数);以及一元-(否定)。* - Simon Forsberg
1
@Javier Lua 5.0不支持%运算符。然而,5.1及更高版本支持。请参见我的答案。 - Simon Forsberg
6个回答

58

4
在 Lua 5.0 中,没有 math.fmod 这个函数,它在 Lua 5.1 中从 math.mod 重命名为 math.fmod。然而,在 Lua 5.1 中还添加了 % 运算符,所以如果 OP 正在运行 Lua 5.0,则使用 fmod 是错误的函数。请记住,math.fmod% 执行相同的操作。 - Simon Forsberg

30

虽然不太理想,但根据Lua 5.2参考手册,有以下结论:

a % b == a - math.floor(a/b)*b


9
这似乎是针对旧版本Lua的一种解决方法。至少在Lua 5.2及更高版本中,百分号(%)可以正常工作。 - Henrik Erlandsson
3
% 运算符在 Lua 5.1 中被添加。 - Simon Forsberg

7
Lua 5.0不支持%运算符。
Lua支持通常的算术运算符:二进制+(加法)、-(减法)、*(乘法)、/(除法)和^(指数);以及一元-(否定)。 https://www.lua.org/manual/5.0/manual.html 然而,Lua 5.1支持%运算符。
Lua支持通常的算术运算符:二进制+(加法)、-(减法)、*(乘法)、/(除法)、%(取模)和^(指数);以及一元-(否定)。 https://www.lua.org/manual/5.1/manual.html

如果可能的话,我建议您进行升级。如果不可能,请使用 数学函数 中列出的 math.mod(在 5.0 版本中被重命名为 math.fmod Lua 5.1)。


6
function mod(a, b)
    return a - (math.floor(a/b)*b)
end

5
for i = 1, 100 do
    if (math.mod(i,2) == 0) then
        print( i .. " is divisible.")
    end
end

最近的文档中没有记录这个奇怪的事情。(至少通过简单的测试,它似乎像fmod一样工作。) - Henrik Erlandsson
@HenrikErlandsson 最近的文档中并没有未记录的内容,该函数在5.0中被称为“mod”,在5.1中更名为“fmod”。 - Simon Forsberg

3

根据lua手册,请使用math.fmod,因为在lua 5.1中math.mod已被重命名为math.fmod


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接