0Pricing
Lua Academy · Lección

string.format para la salida

Formatee strings con %s, %d, %f y otros especificadores de formato.

string.format para la salida es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.

Conceptos básicos de string.format

string.format(fmt, ...) da formato a los valores mediante especificadores de formato de estilo C. Devuelve una cadena con formato. La cadena de formato contiene texto literal y especificadores de conversión que comienzan por %. Esta es la forma principal de generar una salida precisa en Lua.

print(string.format("Hello, %s!", "Lua"))      -- Hello, Lua!
print(string.format("Pi is %.4f", math.pi))   -- Pi is 3.1416
print(string.format("%d items at $%.2f each", 5, 2.99))

%d y %i para enteros

%d y %i dan formato a enteros. Añada un ancho para aplicar relleno: %5d rellena hasta 5 caracteres y alinea a la derecha. %-5d alinea a la izquierda. %05d rellena con ceros. Estos especificadores truncan los números de coma flotante; utilice math.floor() primero si es necesario.

print(string.format("%d",  42))       -- 42
print(string.format("%5d", 42))       --    42 (right-aligned)
print(string.format("%-5d|", 42))     -- 42   | (left-aligned)
print(string.format("%05d", 42))      -- 00042
print(string.format("%+d", 42))       -- +42

%f y %e para números de coma flotante

%f aplica formato de notación de punto fijo; %e, de notación científica; %g elige la representación más corta. Un especificador de precisión (por ejemplo, %.2f) controla las posiciones decimales. La precisión predeterminada es 6.

print(string.format("%.2f",  3.14159)) -- 3.14
print(string.format("%10.3f", 3.14))   --      3.140
print(string.format("%e", 12345.678))  -- 1.234568e+04
print(string.format("%.2e", 0.001))    -- 1.00e-03
print(string.format("%g", 100.0))      -- 100

%s para cadenas

%s inserta una cadena. Los valores que no son cadenas se convierten con tostring. El ancho y la alineación funcionan igual que con los números. %q incluye una cadena entre comillas en un formato legible por Lua (con secuencias de escape), lo que resulta útil para la serialización.

print(string.format("%-10s|", "hi"))   -- hi        |
print(string.format("%10s|", "hi"))    --         hi|
print(string.format("%.3s", "hello"))  -- hel (truncate)
print(string.format("%q", 'say "hi"'))-- "say \"hi\""
print(string.format("%s=%s", "key","val")) -- key=val

%x y %o para otras bases

%x da formato a un entero en hexadecimal (en minúsculas); %X, en hexadecimal en mayúsculas; %o, en octal; y %u, como entero sin signo. Son útiles para mostrar máscaras de bits, códigos de color y realizar programación de bajo nivel.

print(string.format("%x",  255))   -- ff
print(string.format("%X",  255))   -- FF
print(string.format("%#x", 255))   -- 0xff (with prefix)
print(string.format("%o",  8))     -- 10 (octal)
print(string.format("%08x", 0xDEAD)) -- 0000dead

Varios valores

Pase tantos argumentos como especificadores de formato haya. El número de argumentos debe coincidir: si hay muy pocos, se produce un error; los adicionales se ignoran. Utilice cadenas de formato para construir salidas estructuradas, como tablas, registros o informes.

local function printRow(name, score, grade)
  print(string.format("%-12s  %3d  %s", name, score, grade))
end

printRow("Alice",    95, "A")
printRow("Bob",      87, "B")
printRow("Carol",    91, "A")
-- Alice         95  A
-- Bob           87  B
-- Carol         91  A

Construir plantillas de formato

Guarde las cadenas de formato como constantes para reutilizarlas. Esto mantiene la salida coherente y facilita cambiar el formato en un solo lugar. El formato de cadenas es la base del registro, la salida CSV y la generación de informes.

local LOG_FMT = "[%s] %s: %s"

local function log(level, module, msg)
  print(string.format(LOG_FMT, level, module, msg))
end

log("INFO",  "server", "started on port 8080")
log("WARN",  "db",     "connection pool low")
log("ERROR", "auth",   "token expired")

Relleno y alineación

Utilice especificadores de ancho para alinear la salida. Un ancho positivo alinea a la derecha; uno negativo, a la izquierda. Esto resulta especialmente útil en tablas e informes en los que las columnas deben quedar alineadas. Combínelo con string.rep para crear líneas separadoras.

local fmt = "%-15s %6s %8s"
print(string.format(fmt, "Name", "Score", "Grade"))
print(string.rep("-", 31))
local data = {{"Alice",95,"A"},{"Bob",87,"B"},{"Dave",78,"C"}}
for _, r in ipairs(data) do
  print(string.format(fmt, r[1], r[2], r[3]))
end

Literales %c y %%

%c convierte un entero en el carácter ASCII correspondiente. %% produce un signo de porcentaje literal. Son útiles para generar caracteres especiales o incluir % en cadenas de formato.

print(string.format("%c%c%c", 76, 117, 97))  -- Lua
print(string.format("100%%"))                -- 100%
print(string.format("%.1f%%", 87.5))         -- 87.5%

-- Build a progress bar
local pct = 65
local filled = math.floor(pct / 5)
local bar = "[" .. string.rep("#",filled) .. string.rep(".",20-filled) .. "]"
print(bar .. " " .. pct .. "%")

string.format frente a tostring

Utilice tostring para una conversión sencilla de cualquier tipo; utilice string.format para controlar la precisión, aplicar relleno y dar formato a varios valores. string.format("%s", val) llama internamente a tostring para las conversiones a cadena.

-- tostring: simple, any type
print(tostring(3.14))      -- 3.14
print(tostring(true))      -- true
print(tostring(nil))       -- nil

-- string.format: precision + structure
print(string.format("%.2f", 3.14159))  -- 3.14
print(string.format("%d", 255))        -- 255
-- print(string.format("%d", true))    -- ERROR

Comprobación rápida

¿Qué produce string.format("%05.2f", 3.1)?

Repaso: string.format

Resumen:

  • %s cadena, %d entero, %f número de coma flotante, %x hexadecimal
  • Ancho: %10d alinea a la derecha, %-10d a la izquierda, %010d rellena con ceros
  • Precisión: %.2f (2 posiciones decimales), %.3s (3 caracteres)
  • %q incluye una cadena entre comillas para analizarla en Lua
  • %% signo de porcentaje literal

Preguntas frecuentes

¿La lección «string.format para la salida» es gratis?

Sí — el texto completo de «string.format para la salida» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.

¿Qué aprenderé en «string.format para la salida»?

Formatee strings con %s, %d, %f y otros especificadores de formato. Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Lua Academy?

No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «string.format para la salida»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Lua Academy?

Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Conceptos básicos de strings: concatenación y longitud
  2. Búsqueda y extracción de substrings
  3. string.format para la salida
  4. string.gsub y string.gmatch
← Volver a Lua Academy