Typ danych liczba, lub double, reprezentuje liczbę zmiennoprzecinkową podwójnej precyzji (64-bitową). Liczby mogą mieć zakres od -1.7 * 10308 do 1.7 * 10308 (około 15 cyfr precyzji, dodatnich lub ujemnych).
Liczby ze znakiem i bez znaku
Znak liczby wskazuje, czy jest ona dodatnia, czy ujemna. Na przykład 1 jest dodatnie, a -1 jest ujemne. W Luau liczba -0 jest równa 0.
print(0 == -0) --> trueprint(-0 > 1) --> falseprint(-0 < 1) --> trueprint(-0 > -1) --> trueprint(-0 < -1) --> false
Klasyfikacje liczb
Luau nie rozróżnia między liczbami całkowitymi a liczbami zmiennoprzecinkowymi, ale dokumentacja API czasami je rozróżnia, aby być bardziej konkretna na temat użycia każdego API.
float
Typ liczby float odnosi się do liczby rzeczywistej z miejscem dziesiętnym. W terminach informatycznych są to liczby zmiennoprzecinkowe pojedynczej precyzji (32-bitowe), które nie są tak precyzyjne jak liczby zmiennoprzecinkowe podwójnej precyzji, ale są wystarczająco precyzyjne dla większości zastosowań i wymagają mniej pamięci i miejsca na dysku.
int
Typ liczby integer, lub int, odnosi się do 32-bitowej liczby całkowitej, która ma zakres od -231 do 231 - 1. Właściwości i funkcje, które oczekują liczb całkowitych, mogą automatycznie zaokrąglać lub zgłaszać błędy, gdy przypisujesz lub przekazujesz im liczby niecałkowite.
int64
Typ liczby int64 odnosi się do podpisanej 64-bitowej liczby całkowitej, która ma zakres od -263 do 263 - 1. Ten typ liczby całkowitej jest powszechny w metodach, które korzystają z identyfikatorów ID z witryny Roblox. Na przykład Player.UserId jest int64, a MarketplaceService:PromptPurchase() i TeleportService:Teleport() oczekują int64 dla argumentów identyfikatora.
Notacja
Liczby są notowane z najważniejszymi cyframi na początku (big-endian). Istnieje kilka sposobów notowania literali liczbowych w Luau:
- Dziesiętny (podstawa 10) — Zapisz cyfry liczby normalnie, używając cyfr 0–9 z pojedynczym opcjonalnym miejscem dziesiętnym, na przykład 7, 1.25 lub -22.5.
- Notacja naukowa — Zapisz liczbę dziesiętną po e lub e+, a następnie liczbę całkowitą, aby podnieść liczbę dziesiętną do potęgi 10. Na przykład 12e3 to 12 × 10^3 (12 000).
- Szesnastkowy (podstawa 16) — Rozpocznij liczbę od 0x, a następnie cyfry 0–9 lub A–F (wielkość liter ignorowana). Na przykład 0xF to 15, a 0x3FC to 1020.
- Binarny (podstawa 2) — Rozpocznij liczbę od 0b, a następnie 0s lub 1s, na przykład 0b1100 (12 w formacie dziesiętnym).
Operacje
Możesz używać logicznych i relacyjnych operatorów do manipulowania i porównywania liczb. Możesz także używać funkcji matematycznych, takich jak math.sqrt() i math.exp() w bibliotece math oraz operacji bitowych w bibliotece bit32.
Introspekcja typów
Możesz ustalić, czy wartość x jest liczbą za pomocą type(x) lub typeof(x). Obie zwracają ciąg number, jeśli x jest liczbą.
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
Funkcje zaokrąglania
Możesz zaokrąglać liczby, używając math.floor(), math.ceil(), lub math.modf(). Te funkcje zwracają wynik całkowity, jeśli Luau może to przedstawić jako liczbę całkowitą. Jeśli liczba jest zbyt duża, Luau zwraca ją jako float.
- Aby określić, czy liczba x jest liczbą całkowitą, użyj math.floor(x) == x.
- Aby zaokrąglić liczbę w dół, użyj math.floor().
- Aby zaokrąglić liczbę w górę, użyj math.ceil().
- Aby zaokrąglić liczbę w kierunku zera, użyj math.modf(). Zwraca również różnicę ułamkową zaokrąglonej liczby jako drugi wynik.
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