0

Kiểu số trong Dart/Flutter

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 đến 2^63 - 1. Ngoài kiểu số nguyên int, trong Dart còn có kiểu số nguyên BigInt để 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ực a có giá trị 3 chú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áo double 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ới 1.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án div trong các ngôn ngữ khác)
  • % Phép chia lấy số dư (tương tự như phép toán mod 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 chia 0/0 trả về kết quả NaN
  • isFinite kiểm tra một số có là số hữu hạn hay không
  • isInfinite kiểm tra một số có phải dương vô cùng không, ví dụ phép chia 1/0 trả về kết quả dương vô cùng
  • abs()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ả -1615.2.ceil() cho kết quả 15

Để dễ hình dung về hàm ceil()floor(), bạn tưởng tượng mỗi số thực x sẽ bị chặn trên và dưới bởi hai số nguyên ab, nghĩa là a <= x <= b thì số nguyên a được gọi là x.floor() còn số nguyên b được gọi là là x.ceil()

  • round() làm tròn số đến số nguyên gần nhất
  • isEven, 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ông
  • sign 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ột source có kiểu chuỗi String sang kiểu số.
    Đối với kiểu số nguyên int thì phương thức int.parse(String source) còn có thêm tham số tùy chọn radix 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ức double.parse(String source) chấp nhận source 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âu String
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ới n 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 đến n 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

hocbaicungcon

Leave a Reply

Your email address will not be published. Required fields are marked *