Kiểu dữ liệu số, hoặc double, đại diện cho một số dấu phẩy động độ chính xác gấp đôi (64-bit). Các số có thể dao động từ -1.7 * 10308 đến 1.7 * 10308 (khoảng 15 chữ số độ chính xác, dương hoặc âm).
Có dấu và không có dấu
Dấu của số cho biết liệu nó là dương hay âm. Ví dụ, 1 là dương và -1 là âm. Trong Luau, số -0 tương đương với 0.
print(0 == -0) --> trueprint(-0 > 1) --> falseprint(-0 < 1) --> trueprint(-0 > -1) --> trueprint(-0 < -1) --> false
Phân loại số
Luau không phân biệt giữa số nguyên và số, nhưng tài liệu API đôi khi phân biệt giữa chúng để cụ thể hơn về cách sử dụng từng API.
float
Kiểu số float đề cập đến một số thực có dấu phẩy. Theo các thuật ngữ khoa học máy tính, chúng là số dấu phẩy động độ chính xác đơn (32-bit), không chính xác bằng các số dấu phẩy động độ chính xác gấp đôi, nhưng đủ chính xác cho hầu hết các trường hợp sử dụng và yêu cầu ít bộ nhớ và lưu trữ hơn.
int
Kiểu số integer, hoặc int, đề cập đến một số nguyên 32-bit, dao động từ -231 đến 231 - 1. Các thuộc tính và hàm mong đợi các số nguyên có thể tự động làm tròn hoặc phát sinh lỗi khi bạn gán hoặc truyền các số không nguyên cho chúng.
int64
Kiểu số int64 đề cập đến một số nguyên có dấu 64-bit, dao động từ -263 đến 263 - 1. Kiểu số nguyên này phổ biến cho các phương thức sử dụng số ID từ trang web Roblox. Ví dụ, Player.UserId là một int64, và MarketplaceService:PromptPurchase() và TeleportService:Teleport() mỗi cái đều mong đợi int64 cho các tham số ID.
Ký hiệu
Các số được ghi bằng cách sử dụng các chữ số có trọng số nhất đầu tiên (big-endian). Có nhiều cách để ghi các hằng số số trong Luau:
- Số thập phân (cơ số 10) — Ghi các chữ số của số theo cách thông thường sử dụng các chữ số 0–9 với một dấu phẩy tùy chọn, ví dụ 7, 1.25, hoặc -22.5.
- Ký hiệu khoa học — Viết một số thập phân theo sau bởi e hoặc e+, sau đó là một số nguyên để tăng số thập phân lên một lũy thừa của 10. Ví dụ, 12e3 là 12 × 10^3 (12,000).
- Số thập lục phân (cơ số 16) — Bắt đầu số bằng 0x theo sau là các chữ số 0–9 hoặc A–F (cách viết chữ hoa không quan trọng). Ví dụ, 0xF là 15 và 0x3FC là 1020.
- Số nhị phân (cơ số 2) — Bắt đầu số bằng 0b theo sau là các số 0 hoặc 1, ví dụ 0b1100 (12 trong định dạng thập phân).
Phép toán
Bạn có thể sử dụng các toán tử logic và quan hệ để thao tác và so sánh các số. Bạn cũng có thể sử dụng các hàm toán học như math.sqrt() và math.exp() trong thư viện math và các phép toán theo bit trong thư viện bit32.
Khám phá kiểu
Bạn có thể xác định xem một giá trị x có phải là một số hay không bằng cách sử dụng type(x) hoặc typeof(x). Cả hai đều trả về chuỗi number nếu x là một số.
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
Hàm làm tròn
Bạn có thể làm tròn các số bằng cách sử dụng math.floor(), math.ceil(), hoặc math.modf(). Những hàm này trả về một kết quả số nguyên nếu Luau có thể biểu diễn nó dưới dạng số nguyên. Nếu số quá lớn, Luau sẽ trả về nó dưới dạng số dấu phẩy động.
- Để xác định xem một số x có phải là số nguyên không, hãy sử dụng math.floor(x) == x.
- Để làm tròn một số xuống, hãy sử dụng math.floor().
- Để làm tròn một số lên, hãy sử dụng math.ceil().
- Để làm tròn một số hướng về phía không, hãy sử dụng math.modf(). Nó cũng trả về sự khác biệt phần thập phân của số đã được làm tròn như một kết quả thứ hai.
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