Lua замена оператора %

Я хочу проверить, делится ли число на другое число:

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

Это должно работать без проблем, но с Lua на моем сервере скрипт не запускается, если в скрипте есть %... Я не знаю, в чем причина, так есть ли какая-то "замена" для этого? Чтобы я мог проверить делимость числа?

Спасибо.


person Cyclone    schedule 14.03.2012    source источник
comment
Какая версия Lua работает на сервере?   -  person Nicol Bolas    schedule 14.03.2012
comment
Я думаю, что это 5.0 или более поздняя версия :S.   -  person Cyclone    schedule 14.03.2012
comment
похоже, у вас проблемы с кодировкой; возможно, если вы найдете, что это за кодировка, вы сможете прокрасться через %. попробуйте "%%" или "\%" или "%25"   -  person Javier    schedule 14.03.2012
comment
Я отрицаю этот вопрос, потому что считаю, что он задает неправильный вопрос: настоящий вопрос здесь: почему % не работает для меня в Lua? Согласно документации по Lua Lua поддерживает обычные арифметические операторы: двоичный + (сложение), - (вычитание), * (умножение), / (деление), % (по модулю) и ^ (возведение в степень); и унарный - (отрицание).   -  person Simon Forsberg    schedule 07.01.2018
comment
@Javier Lua 5.0 не поддерживал оператор %. 5.1 и выше, однако. Смотрите мой ответ.   -  person Simon Forsberg    schedule 07.01.2018


Ответы (5)


Это не идеально, но согласно Справочному руководству по Lua 5.2:

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

person ninesided    schedule 14.03.2012
comment
Это кажется обходным путем для старых версий Lua. По крайней мере, % отлично работает в Lua 5.2 и более поздних версиях. - person Henrik Erlandsson; 27.08.2013
comment
@HenrikErlandsson % был добавлен в качестве оператора в Lua 5.1. - person Simon Forsberg; 08.01.2018

Используйте math.fmod(x,y), который делает то, что вы хотите:

Возвращает остаток от деления x на y, который округляет частное до нуля.

http://www.lua.org/manual/5.2/manual.html#pdf-math.fmod

person lhf    schedule 14.03.2012
comment
math.fmod не существовало в Lua 5.0, оно было переименовано с math.mod на math.fmod в Lua 5.1. Однако в Lua 5.1 также добавлен оператор %, поэтому, если OP работает под управлением Lua 5.0, fmod — неправильная функция для использования. - person Simon Forsberg; 08.01.2018

Используйте math.fmod, согласно руководству lua math.mod было переименовано в math.fmod в lua 5.1. .

person vr3C    schedule 15.12.2016

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 )

person Simon Forsberg    schedule 07.01.2018

person    schedule
comment
Странно, что это не задокументировано в последней документации. (По крайней мере, при простом тесте он работает как fmod.) - person Henrik Erlandsson; 27.08.2013
comment
@HenrikErlandsson Это не задокументировано в недавней документации, функция называлась mod в 5.0 и переименована в fmod в 5.1. - person Simon Forsberg; 07.01.2018