script concatenating concatenate c lua tostring

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 flotador 2.0 se imprimirá como 2.0 , no como 2 ). 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