tonumber - string in lua
Lua: conversión de float a int (4)
Aunque Lua no distingue entre números de coma flotante y números enteros, hay algunos casos en los que desea usar números enteros. ¿Cuál es la mejor manera de convertir un número en un número entero si no puede hacer un lanzamiento tipo C o sin algo como el int
de Python?
Por ejemplo, al calcular un índice para una matriz en
idx = posición / ancho
¿Cómo puede asegurarse de que idx
es un índice de matriz válido? He encontrado una solución que usa string.find
, pero tal vez hay un método que usa aritmética que obviamente sería mucho más rápido. Mi solución:
function toint(n)
local s = tostring(n)
local i, j = s:find(''%.'')
if i then
return tonumber(s:sub(1, i-1))
else
return n
end
end
¿Por qué no usar math.floor()
? haría que los índices sean válidos siempre que el numerador y el denominador no sean negativos y estén en rangos válidos.
@Hofstad es correcto con la math.floor(Number x)
para eliminar los bits a la derecha del decimal, es posible que desee redondear. No hay math.round, pero es tan simple como math.floor(x + 0.5)
. La razón por la que quieres redondear es porque las flotaciones son generalmente aproximadas Por ejemplo, 1 podría ser 0.999999996
12.4 + 0.5 = 12.9, piso 12
12.5 + 0.5 = 13, piso 13
12.6 + 0.5 = 13.1, piso 13
local round = function(a, prec)
return math.floor(a + 0.5*prec) -- where prec is 10^n, starting at 0
end
Lua 5.3 introdujo un nuevo operador, llamado división de piso y denotado por //
golpes de ejemplo
Lua 5.3.1 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> 12 // 5
2
Más información se puede encontrar en la referencia lua
Podrías usar math.floor(x)
Del manual de referencia de Lua :
Devuelve el entero más grande menor o igual que x.