concatenating - lua table
Lua-NĂºmero a cadena de comportamiento (4)
En Lua 5.2 o anterior, tanto tostring(10)
como tostring(10.0)
resultan como la cadena "10"
.
En Lua 5.3, esto ha cambiado:
print(tostring(10)) -- "10"
print(tostring(10.0)) -- "10.0"
Eso es porque Lua 5.3 introdujo el subtipo entero. De los cambios en el lenguaje :
La conversión de un flotante en una cadena ahora agrega un sufijo
.0
al resultado si parece un entero. (Por ejemplo, el flotador2.0
se imprimirá como2.0
, no como2
). Siempre debe usar un formato explícito cuando necesite un formato específico para números.
Me gustaría saber cómo maneja Lua el número de conversiones de cadena utilizando la función tostring()
.
Se convertirá a int (como cadena) si el número es redondo (es decir, si number == (int) number
) o siempre va a generar un real (como cadena) como 10.0
?
Necesito imitar el comportamiento exacto de la tostring
de Lua en C, sin usar la API de Lua C ya que, en este caso, no estoy usando un lua_State
.
En Lua 5.3, debido al tipo de entero, tostring
en un float (aunque su valor numérico puede ser equivalente a un entero) agregará un sufijo "''.0''
, ¡pero eso no significa que no pueda acortarlo!
local str = tostring(n)
if str:sub(-2) == ".0" then
str = str:sub(1,-3)
end
Lua convierte los números como están:
print(tostring(10)) => "10"
print(tostring(10.0)) => "10.0"
print(tostring(10.1)) => "10.1"
Si quieres jugar con ellos, hay un pequeño analizador en línea para comandos simples como este: http://www.lua.org/cgi-bin/demo Esto usa Lua 5.3.1
editar Debo respaldar el comentario de Egor, depende de la versión. Ejecuté esto localmente en mi sistema:
Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> print(tostring(10))
10
> print(tostring(10.0))
10
Si está utilizando 5.3.4 y necesita una revisión rápida, use math.floor, lo convierte en un número int. Esto supera la respuesta de @warspyking en eficiencia, pero carece de la frescura que es un montón de código.
>tostring(math.floor(54.0))
54
>tostring(54.0)
54.0