Skip to content

LuaDecimal

LuaDecimal representa un número decimal de alta precisión, ideal para montos, precios y valores financieros.

Conversión a string

lua
tostring(d)  -- → "13453.33"
"" .. d      -- → "13453.33"

Creación

Se crea con la función global decimal():

lua
local monto = decimal("123.45")   -- desde string
local iva   = decimal(21.5)       -- desde number
local c     = decimal(variable)   -- desde cualquier variable number/string

Aritmética

Soporta operaciones con otros LuaDecimal y con números nativos:

lua
local total = monto + iva       -- → LuaDecimal
local diff  = monto - 50        -- → LuaDecimal
local iva2  = monto * 0.21      -- → LuaDecimal
local mitad = monto / 2         -- → LuaDecimal

Comparación

Se puede comparar con otros LuaDecimal y con números nativos:

lua
monto > 100                     -- → true
monto == 123.45                 -- → true
monto < 200                     -- → true

Uso con funciones nativas

Gracias a __tonumber, se puede usar donde se espera un number nativo:

lua
local redondeado = math.floor(monto)

Parte entera

lua
monto:int()                         -- → 1250 (number, truncado)

Formato

decimal:format()

Formatea el decimal con un patrón específico y cultura opcional.

lua
monto:format()                      -- → "1.250,50" (según cultura de la app)
monto:format("C")                   -- → "$ 1.250,50" (moneda)
monto:format("N0")                  -- → "1.251" (sin decimales)
monto:format("0.00", "en-US")       -- → "1250.50" (cultura explícita)
monto:format("#,##0.00")            -- → "1.250,50"

El formato sigue los patrones de formato numérico de .NET.