Kiểu số trong Dart/Flutter
Kiểu số trong Dart/Flutter bao gồm 2 loại:
int
Kiể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.double
Kiể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ựca
có giá trị3
chúng ta phải viết rõdouble a = 3.0
Tuy 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.35e2
tươ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ándiv
trong các ngôn ngữ khác)
%
Phép chia lấy số dư (tương tự như phép toánmod
trong 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/0
trả về kết quảNaN
isFinite
kiểm tra một số có là số hữu hạn hay khôngisInfinite
kiểm tra một số có phải dương vô cùng không, ví dụ phép chia1/0
trả 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ựcx
sẽ bị chặn trên và dưới bởi hai số nguyêna
vàb
, nghĩa làa <= x <= b
thì 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
,isOdd
kiể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ôngsign
thuộc tính dấu của một số, trả về-1
nếu số đó âm, trả về1
nế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ộtsource
có kiểu chuỗiString
sang kiểu số.
Đối với kiểu số nguyênint
thì phương thứcint.parse(String source)
còn có thêm tham số tùy chọnradix
cho 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ốradix
nhậ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
double
thì phương thứcdouble.parse(String source)
chấp nhậnsource
có 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ớin
chữ 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 đếnn
chữ số (n
chữ 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