Kiểu số trong Dart/Flutter
Kiểu số trong Dart/Flutter bao gồm 2 loại:
intKiểu số nguyên. Tùy thuộc vào bộ nhớ máy, nền tảng máy (32 bit hay 64 bit) mà kiểu số nguyên trong Dart có giá trị từ-2^63đến2^63 - 1. Ngoài kiểu số nguyênint,trong Dart còn có kiểu số nguyênBigIntđể làm việc với các số nguyên lớn.doubleKiểu số thực. Các phiên bản cũ của Dart thì kiểu số thực bắt buộc phải có dấu.chẳng hạn để khai báo biến số thựcacó giá trị3chúng ta phải viết rõdouble a = 3.0Tuy nhiên các phiên bản hiện nay đã bỏ phần dấu . này đi, bạn có thể khai báodouble a = 3
Từ phiên bản 2.0 trở đi thì khi khai báo biến kiểu số, Dart không gán giá trị mặc định null nữa, mà bạn phải gán giá trị thuộc kiểu phù hợp cho biến trước khi sử dụng biến đó. (Xem thêm trong bài Null safety Dart / Null safety Flutter là gì?)
Cả hai kiểu số nguyên int và kiểu số thực double đều là subclasses (lớp con) của lớp num. Bạn nên sử dụng một trong hai kiểu int hoặc double thay vì kiểu num.
Kiểu số thực có thể viết dưới dạng kí pháp khoa học, ví dụ
1.35e2tương đương với1.35*10^2
Các phép toán trên kiểu số nguyên int và kiểu số thực double trong Dart/Flutter
Chi tiết về các phép toán (toán tử) xin mời bạn xem trong bài Các phép toán trong Dart (Toán tử Dart/Flutter)
+- * /Các phép toán cộng, trừ, nhân, chia thông thường
~/Phép chia lấy phần nguyên (tương tự như phép toándivtrong các ngôn ngữ khác)
%Phép chia lấy số dư (tương tự như phép toánmodtrong các ngôn ngữ lập trình khác)
Các phương thức và thuộc tính của kiểu số trong Dart / Flutter
isNaNđể kiểm tra xem một biểu thức có không phải là số hay không. Ví dụ, phép chia0/0trả về kết quảNaNisFinitekiểm tra một số có là số hữu hạn hay khôngisInfinitekiểm tra một số có phải dương vô cùng không, ví dụ phép chia1/0trả về kết quả dương vô cùngabs()trả về giá trị tuyệt đối của một số, ví dụ(-15.3).abs()cho kết quả15.3
ceil()trả về số nguyên nhỏ nhất không nhỏ hơn số đó (làm tròn lên), ví dụ(-15.3).ceil()cho kết quả-15,15.2.ceil()cho kết quả16
floor()trả về số nguyên lớn nhất không lớn hơn số đó (làm tròn xuống), ví dụ(-15.3).floor()cho kết quả-16,15.2.ceil()cho kết quả15
Để dễ hình dung về hàm
ceil()vàfloor(), bạn tưởng tượng mỗi số thựcxsẽ bị chặn trên và dưới bởi hai số nguyênavàb, nghĩa làa <= x <= bthì số nguyênađược gọi làx.floor()còn số nguyênbđược gọi là làx.ceil()
round()làm tròn số đến số nguyên gần nhấtisEven,isOddkiểm tra một số nguyên là chẵn (even) hay lẻ (odd)isNegative()kiểm tra xem một số có là số âm hay khôngsignthuộc tính dấu của một số, trả về-1nếu số đó âm, trả về1nếu số đó dương
Chuyển đổi số sang xâu trong Dart
Để chuyển đổi số sang xâu trong Dart, chuyển đổi xâu sang số, chúng ta sử dụng hai phương thức quen thuộc sau:
parse(String source)dùng để chuyển đổi mộtsourcecó kiểu chuỗiStringsang kiểu số.
Đối với kiểu số nguyênintthì phương thứcint.parse(String source)còn có thêm tham số tùy chọnradixcho biết cơ số của số cần chuyển, ví dụint.parse("111", radix:2)cho kết quả7(vì số 111 trong hệ nhị phân có giá trị 7 trong hệ thập phân). Khi không cung cấp giá trị thì tham sốradixnhận giá trị mặc định là10, tức là xâu cần chuyển được viết ở dạng số thập phân.
Đối với kiểu số thực
doublethì phương thứcdouble.parse(String source)chấp nhậnsourcecó dạng sau:"3.14" " 3.14 \xA0" "0." ".0" "-1.e3" "1234E+7"
void main() {
int? a;
double b = 0;
num? c;
a = int.parse("111", radix:2);//kết quả 7
print(a);
a = int.parse('001');
print(a);
print(a.runtimeType); //kết quả int
b = double.parse('.0314');
print(b);//kết quả 0.0314
print(b.runtimeType); //kết quả double
c = num.parse('0x22');//số 22 trong hệ hexa (cơ số 16)
print(c);//kết quả 34
print(c.runtimeType);//kết quả int
}
toString()sử dụng để chuyển một số sang xâuString
void main() {
num? c;
print(3.14.toString());//kết quả '3.14'
c = num.parse('0x22');//số 22 trong hệ hexa (cơ số 16)
print(c.toString());//kết quả '34'
}
Để chuyển số thực sang xâu (double to String) chúng ta còn có hai phương thức nữa:
toStringAsFixed(n)chuyển đổi một số thực sang xâu vớinchữ số sau dấu phảy
1.toStringAsFixed(3); // 1.000 (4321.12345678).toStringAsFixed(3); // 4321.123 (4321.12345678).toStringAsFixed(5); // 4321.12346 123456789012345.toStringAsFixed(3); // 123456789012345.000 10000000000000000.toStringAsFixed(4); // 10000000000000000.0000 5.25.toStringAsFixed(0); // 5
toStringAsPrecision(n)với độ chính xác đếnnchữ số (nchữ số có nghĩa)
1.toStringAsPrecision(2); // 1.0 1e15.toStringAsPrecision(3); // 1.00e+15 1234567.toStringAsPrecision(3); // 1.23e+6 1234567.toStringAsPrecision(9); // 1234567.00 12345678901234567890.toStringAsPrecision(20); // 12345678901234567168 12345678901234567890.toStringAsPrecision(14); // 1.2345678901235e+19 0.00000012345.toStringAsPrecision(15); // 1.23450000000000e-7 0.0000012345.toStringAsPrecision(15); // 0.00000123450000000000
