tonumber lua floating-point

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