O tipo de dado número, ou double, representa um número em ponto flutuante de dupla precisão (64 bits). Os números podem variar de -1.7 * 10308 a 1.7 * 10308 (cerca de 15 dígitos de precisão, positivos ou negativos).
Assinados e não assinados
O sinal do número indica se ele é positivo ou negativo. Por exemplo, 1 é positivo e -1 é negativo. Em Luau, o número -0 é equivalente a 0.
print(0 == -0) --> trueprint(-0 > 1) --> falseprint(-0 < 1) --> trueprint(-0 > -1) --> trueprint(-0 < -1) --> false
Classificações de números
Luau não faz distinção entre inteiros e números, mas a referência da API às vezes faz essa distinção para ser mais específica sobre como usar cada API.
float
O tipo de número float refere-se a um número real com uma casa decimal. Em termos de ciência da computação, eles são números em ponto flutuante de precisão simples (32 bits), que não são tão precisos quanto números em ponto flutuante de dupla precisão, mas são suficientemente precisos para a maioria dos casos de uso e requerem menos memória e armazenamento.
int
O tipo de número integer, ou int, refere-se a um número inteiro de 32 bits, que varia de -231 a 231 - 1. Propriedades e funções que esperam inteiros podem automaticamente arredondar ou gerar erros quando você atribui ou passa não-inteiros para elas.
int64
O tipo de número int64 refere-se a um inteiro assinado de 64 bits, que varia de -263 a 263 - 1. Este tipo de inteiro é comum para métodos que usam números de ID do site Roblox. Por exemplo, Player.UserId é um int64, e MarketplaceService:PromptPurchase() e TeleportService:Teleport() esperam int64 para os argumentos de ID.
Notação
Os números são notados com os dígitos mais significativos primeiro (big-endian). Existem várias maneiras de anotar literais numéricos em Luau:
- Decimal (base-10) — Escreva os dígitos do número normalmente usando os dígitos 0–9 com um único ponto decimal opcional, por exemplo 7, 1.25, ou -22.5.
- Notação científica — Escreva um número decimal seguido de e ou e+, então um inteiro para elevar o número decimal a uma potência de 10. Por exemplo, 12e3 é 12 × 10^3 (12.000).
- Hexadecimal (base-16) — Comece o número com 0x seguido de dígitos 0–9 ou A–F (a capitalização é ignorada). Por exemplo, 0xF é 15 e 0x3FC é 1020.
- Binário (base-2) — Comece o número com 0b seguido de 0s ou 1s, por exemplo 0b1100 (12 em formato decimal).
Operações
Você pode usar operadores lógicos e relacionais para manipular e comparar números. Você também pode usar funções matemáticas como math.sqrt() e math.exp() na biblioteca math e operações bitwise na biblioteca bit32.
Introspecção de tipo
Você pode determinar se um valor x é um número usando type(x) ou typeof(x). Ambos retornam a string number se x for um número.
local testInt = 5local testDecimal = 9.12761656local testString = "Olá"print(type(testInt)) --> numberprint(type(testDecimal)) --> numberprint(type(testString)) --> stringprint(typeof(testInt)) --> numberprint(typeof(testDecimal)) --> numberprint(typeof(testString)) --> string
Funções de arredondamento
Você pode arredondar números usando math.floor(), math.ceil() ou math.modf(). Essas funções retornam um resultado inteiro se Luau puder representá-lo como um inteiro. Se o número for muito grande, Luau o retornará como um float.
- Para determinar se um número x é um inteiro, use math.floor(x) == x.
- Para arredondar um número para baixo, use math.floor().
- Para arredondar um número para cima, use math.ceil().
- Para arredondar um número em direção a zero, use math.modf(). Ele também retorna a diferença fracionária do número arredondado como um 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