2012-03-14 16 views
23

Quiero comprobar si un número es divisible por otro número:reemplazo Lua para el operador%

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

Esto debería funcionar sin problemas, pero con el Lua en mi servidor de la secuencia de comandos no se ejecuta si hay un % en el script ... No sé cuál es el motivo, ¿hay algún "reemplazo" para eso? Entonces, ¿podría verificar la divinidad del número?

Gracias.

+1

¿Qué versión de Lua es el servidor que ejecuta –

+0

Creo que es 5.0 o posterior ':? S '. – Cyclone

+6

parece que tiene algunos problemas de codificación, tal vez si encuentra qué codificación es, podría obtener un '%' a través de. Try '%%' o '\%' o '% 25' – Javier

Respuesta

20

No es lo ideal, pero de acuerdo con la Lua 5.2 Reference Manual:

a% b == A - Math.floor (a/b) * b

+6

Esto parece una solución para versiones anteriores de Lua. Al menos% funciona bien en Lua 5.2 y versiones posteriores. –

+0

¿Qué tal un% b == 0? – Preza8

+0

@HenrikErlandsson '%' se agregó como operador en Lua 5.1. –

46

Uso math.fmod(x,y) el que hace lo que quiere :

Devuelve el resto de la división de x en y que redondea el cociente hacia cero.

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

+0

'math.fmod' no existía en Lua 5.0, se renombró de' math.mod' a 'math.fmod' en Lua 5.1. Sin embargo, Lua 5.1 también agregó el operador '%', por lo que si el OP está ejecutando Lua 5.0, 'fmod' es la función incorrecta que debe usarse. –

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

Es extraño que no esté documentado en la documentación reciente. (Al menos con una prueba simple, parece funcionar como fmod). –

+0

@HenrikErlandsson No está sin documentar en la documentación reciente, la función se llamó 'mod' en 5.0 y se renombró a' fmod' en 5.1. –

2

edición: la necesidad * b

3

Uso math.fmod, accroding lua manualmath.mod se renombró a math.fmod en Lua 5.1.

0

Lua 5.0 no era compatible con el operador %.

Lua admite los operadores aritméticos habituales: el binario + (suma), - (resta), * (multiplicación),/(división) y^(exponenciación); y unario - (negación).

https://www.lua.org/manual/5.0/manual.html

Lua 5.1 sin embargo, no apoyar el operador %.

Lua soporta los operadores aritméticos habituales: el + binario (adición), - (resta), * (multiplicación),/(división),% (módulo), y^(exponenciación); y unario - (negación).

https://www.lua.org/manual/5.1/manual.html

Si es posible, le recomiendo que se actualice. Si eso no es posible, utilice math.mod que está catalogado como uno de los Mathematical Functions en 5.0 (Su nombre se cambió a math.fmod en Lua 5.1