Il tipo di dato number, o double, rappresenta un numero a virgola mobile a doppia precisione (64 bit). I numeri possono variare da -1.7 * 10308 a 1.7 * 10308 (circa 15 cifre di precisione, positive o negative).
Firmato e non firmato
Il segno del numero indica se è positivo o negativo. Ad esempio, 1 è positivo e -1 è negativo. In Luau, il numero -0 è equivalente a 0.
print(0 == -0) --> trueprint(-0 > 1) --> falseprint(-0 < 1) --> trueprint(-0 > -1) --> trueprint(-0 < -1) --> false
Classificazioni dei numeri
Luau non distingue tra interi e numeri, ma la documentazione dell'API a volte distingue tra di essi per essere più specifici su come utilizzare ciascuna API.
float
Il tipo di numero float si riferisce a un numero reale con una cifra decimale. In termini informatici, sono numeri a virgola mobile a singola precisione (32 bit), che non sono precisi come i numeri a virgola mobile a doppia precisione, ma sono sufficientemente precisi per la maggior parte degli usi e richiedono meno memoria e spazio di archiviazione.
int
Il tipo di numero integer, o int, si riferisce a un numero intero a 32 bit, che varia da -231 a 231 - 1. Proprietà e funzioni che si aspettano interi possono arrotondare automaticamente o sollevare errori quando assegni o passi non interi a esse.
int64
Il tipo di numero int64 si riferisce a un intero firmato a 64 bit, che varia da -263 a 263 - 1. Questo tipo di intero è comune per i metodi che utilizzano numeri ID dal sito web di Roblox. Ad esempio, Player.UserId è un int64, e MarketplaceService:PromptPurchase() e TeleportService:Teleport() si aspettano entrambi int64 per gli argomenti ID.
Notazione
I numeri sono annotati con le cifre più significative per prime (big-endian). Ci sono modi multipli per annotare letterali numerici in Luau:
- Decimale (base-10) — Scrivi le cifre del numero normalmente usando le cifre 0–9 con un singolo punto decimale opzionale, ad esempio 7, 1.25 o -22.5.
- Notazione scientifica — Scrivi un numero decimale seguito da e o e+, quindi un intero per elevare il numero decimale a una potenza di 10. Ad esempio, 12e3 è 12 × 10^3 (12.000).
- Esadecimale (base-16) — Inizia il numero con 0x seguito da cifre 0–9 o A–F (la maiuscola è ignorata). Ad esempio, 0xF è 15 e 0x3FC è 1020.
- Binario (base-2) — Inizia il numero con 0b seguito da 0 o 1, ad esempio 0b1100 (12 in formato decimale).
Operazioni
Puoi usare operatori logici e relazionali operators per manipolare e confrontare i numeri. Puoi anche utilizzare funzioni matematiche come math.sqrt() e math.exp() nella libreria math e operazioni bitwise nella libreria bit32.
Introspezione del tipo
Puoi determinare se un valore x è un numero usando type(x) o typeof(x). Entrambi restituiscono la stringa number se x è un numero.
local testInt = 5local testDecimal = 9.12761656local testString = "Hello"print(type(testInt)) --> numberprint(type(testDecimal)) --> numberprint(type(testString)) --> stringprint(typeof(testInt)) --> numberprint(typeof(testDecimal)) --> numberprint(typeof(testString)) --> string
Funzioni di arrotondamento
Puoi arrotondare i numeri usando math.floor(), math.ceil(), o math.modf(). Queste funzioni restituiscono un risultato intero se Luau può rappresentarlo come un intero. Se il numero è troppo grande, Luau lo restituisce come float.
- Per determinare se un numero x è un intero, usa math.floor(x) == x.
- Per arrotondare un numero verso il basso, usa math.floor().
- Per arrotondare un numero verso l'alto, usa math.ceil().
- Per arrotondare un numero verso zero, usa math.modf(). Restituisce anche la differenza frazionaria del numero arrotondato come secondo risultato.
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