El tipo de dato número, o double, representa un número de punto flotante de doble precisión (64 bits). Los números pueden variar de -1.7 * 10308 a 1.7 * 10308 (alrededor de 15 dígitos de precisión, positivos o negativos).
Con signo y sin signo
El signo del número indica si es positivo o negativo. Por ejemplo, 1 es positivo y -1 es negativo. En Luau, el número -0 es equivalente a 0.
print(0 == -0) --> trueprint(-0 > 1) --> falseprint(-0 < 1) --> trueprint(-0 > -1) --> trueprint(-0 < -1) --> false
Clasificaciones de números
Luau no distingue entre enteros y números, pero la referencia de la API a veces los distingue para ser más específicos sobre cómo usar cada API.
float
El tipo de número float se refiere a un número real con un punto decimal. En términos de ciencia computacional, son números de punto flotante de precisión simple (32 bits), que no son tan precisos como los números de punto flotante de doble precisión, pero son suficientemente precisos para la mayoría de los casos de uso y requieren menos memoria y almacenamiento.
int
El tipo de número integer, o int, se refiere a un número entero de 32 bits, que varía de -231 a 231 - 1. Las propiedades y funciones que esperan enteros pueden redondear automáticamente o generar errores cuando les asignas o pasas no enteros.
int64
El tipo de número int64 se refiere a un entero con signo de 64 bits, que varía de -263 a 263 - 1. Este tipo de entero es común para métodos que utilizan números de ID del sitio web de Roblox. Por ejemplo, Player.UserId es un int64, y MarketplaceService:PromptPurchase() y TeleportService:Teleport() esperan cada uno int64 para los argumentos de ID.
Notación
Los números se anotan con los dígitos más significativos primero (big-endian). Hay múltiples formas de anotar literales numéricos en Luau:
- Decimal (base-10) — Escribe los dígitos del número normalmente usando los dígitos 0–9 con un solo punto decimal opcional, por ejemplo 7, 1.25, o -22.5.
- Notación científica — Escribe un número decimal seguido de e o e+, luego un entero para elevar el número decimal a una potencia de 10. Por ejemplo, 12e3 es 12 × 10^3 (12,000).
- Hexadecimal (base-16) — Comienza el número con 0x seguido de los dígitos 0–9 o A–F (sin importar la capitalización). Por ejemplo, 0xF es 15 y 0x3FC es 1020.
- Binario (base-2) — Comienza el número con 0b seguido de 0s o 1s, por ejemplo 0b1100 (12 en formato decimal).
Operaciones
Puedes usar operadores lógicos y relacionales para manipular y comparar números. También puedes usar funciones matemáticas como math.sqrt() y math.exp() de la biblioteca math, y operaciones a nivel de bit en la biblioteca bit32.
Introspección de tipos
Puedes determinar si un valor x es un número usando type(x) o typeof(x). Ambos devuelven la cadena number si x es un número.
local testInt = 5local testDecimal = 9.12761656local testString = "Hola"print(type(testInt)) --> numberprint(type(testDecimal)) --> numberprint(type(testString)) --> stringprint(typeof(testInt)) --> numberprint(typeof(testDecimal)) --> numberprint(typeof(testString)) --> string
Funciones de redondeo
Puedes redondear números usando math.floor(), math.ceil(), o math.modf(). Estas funciones devuelven un resultado entero si Luau puede representarlo como un entero. Si el número es demasiado grande, Luau lo devuelve como un float.
- Para determinar si un número x es un entero, usa math.floor(x) == x.
- Para redondear un número hacia abajo, usa math.floor().
- Para redondear un número hacia arriba, usa math.ceil().
- Para redondear un número hacia cero, usa math.modf(). También devuelve la diferencia fraccionaria del número redondeado como segundo resultado.
print(math.floor(3.3)) --> 3print(math.floor(-3.3)) --> -4print(math.ceil(3.3)) --> 4print(math.ceil(-3.3)) --> -3print(math.modf(3.3)) --> 3 0.2999999999999998print(math.modf(-3.3)) --> -3 -0.2999999999999998