CodeGym /Các khóa học /C# SELF /Số và ký tự trong C#

Số và ký tự trong C#

C# SELF
Mức độ , Bài học
Có sẵn

1. Có những loại số nào?

Khi lập trình, tụi mình suốt ngày làm việc với số — từ tuổi người dùng đến số sao trong thiên hà hay số xu trong tài khoản ngân hàng. Nhưng mỗi bài toán lại cần kiểu số khác nhau: đôi khi chỉ cần lưu số nguyên, đôi khi cần số thực siêu chính xác, có lúc lại chỉ cần số "không âm".

Số nguyên (int và các loại khác)

Số nguyên — là số không có phần thập phân.
Trong C#, kiểu thường dùng nhất là int, nhưng ngoài ra còn vài loại nữa, khác nhau về kích thước và phạm vi giá trị.

  • int — kiểu "chủ lực" cho số nguyên. Lưu được giá trị rất lớn (và nhỏ), mà lại không tốn nhiều bộ nhớ.
    Ví dụ: đếm số like, tuổi, số ngày trong năm gần như luôn dùng int.
  • long — dùng khi giá trị có thể rất lớn (kiểu tỷ, nghìn tỷ).
    Ví dụ: lưu tổng số lượt xem YouTube từ trước tới giờ.
  • short — tiết kiệm bộ nhớ, nhưng ít dùng. Hợp với trường hợp có nhiều giá trị nhỏ giống nhau (như dữ liệu âm thanh, thành phần màu sắc).
  • byte — cho giá trị nhỏ hơn nữa, nhất là trong đồ họa hoặc xử lý file, khi cần tiết kiệm bộ nhớ.

Số thực (double, float, decimal)

Đôi khi cần làm việc với số có phần thập phân. Ví dụ: nhiệt độ không khí, điểm trung bình của sinh viên, giá sản phẩm có lẻ.

  • double — kiểu mặc định để lưu số thực. Đủ chính xác cho hầu hết phép tính (ví dụ: 3.1415926535…).
  • float — nhẹ hơn và kém chính xác hơn, hay gặp trong đồ họa máy tính hoặc xử lý mảng dữ liệu lớn, khi cần tiết kiệm bộ nhớ.
  • decimal — dành cho tài chính, kế toán, khi cần chính xác đến từng xu để tránh "mất mát" do cách lưu số thực. Ví dụ: lưu số dư tài khoản, giá sản phẩm, tỷ giá.

Kiểu số đặc biệt

Trong C# còn có các kiểu số đặc biệt cho trường hợp riêng:

  • uint, ulong, ushort — kiểu "không dấu", chỉ dùng cho số dương, phạm vi lớn gấp đôi so với kiểu "có dấu" tương ứng.
  • sbyte — nhỏ, có dấu (lưu gọn số âm và dương từ -128 đến 127).
  • BigInteger — khi cần làm việc với số siêu lớn, vượt ngoài phạm vi chuẩn, ví dụ trong mã hóa hoặc tính toán thiên văn.

2. Số có dấu và không dấu

Kiểu có dấu lưu được cả số dương lẫn số âm. Hợp với trường hợp giá trị có thể "trên hoặc dưới 0": ví dụ nhiệt độ, số dư tài khoản, độ cao so với mực nước biển.

Kiểu không dấu — chỉ có 0 và số dương. Dùng khi chắc chắn không có số âm — ví dụ số người trong phòng, byte trong file, thời gian.

Ví dụ:

  • int (có dấu): -10, 0, 50
  • uint (không dấu): 0, 10, 1000

Dùng kiểu không dấu thì biến sẽ lưu được giá trị lớn gấp đôi (vì không có "nửa âm"). Dùng khi chắc chắn giá trị không thể âm.

Kiểu số nguyên có dấu

Kiểu Kích thước Phạm vi giá trị Ví dụ sử dụng
sbyte
1 byte -128 đến 127 -128, 0, 127
short
2 byte -32 768 đến 32 767 -1000, 0, 32000
int
4 byte -2 147 483 648 đến 2 147 483 647 -1000000, 0, 2000000
long
8 byte -9 223 372 036 854 775 808
đến 9 223 372 036 854 775 807
-10_000_000_000, 1

Kiểu số nguyên không dấu

Kiểu Kích thước Phạm vi giá trị Ví dụ sử dụng
byte
1 byte 0 đến 255 0, 128, 255
ushort
2 byte 0 đến 65 535 1000, 65000
uint
4 byte 0 đến 4 294 967 295 100, 4000000000
ulong
8 byte 0 đến 18 446 744 073 709 551 615 1, 18_000_000_000_000

Kiểu số thực

Kiểu Kích thước Ví dụ giá trị Mô tả
float
4 byte 3.14f, -0.001f độ chính xác đơn (7 chữ số)
double
8 byte 3.1415, -1.7E+308 độ chính xác kép (15-16 chữ số)
decimal
16 byte 0.1m, 12345.6789m siêu chính xác cho tài chính

3. Hậu tố cho số

Đôi khi cần chỉ rõ kiểu số bạn muốn dùng. Làm điều này bằng hậu tố:

  • L hoặc l — cho kiểu long (ví dụ: 10000000000L)
  • U hoặc u — cho kiểu uint (ví dụ: 123U)
  • F hoặc f — cho kiểu float (ví dụ: 3.14f)
  • D hoặc d — cho kiểu double (thường không cần, vì số thực không hậu tố mặc định là double)
  • M hoặc m — cho kiểu decimal (ví dụ: 99.99m — cực kỳ quan trọng khi làm việc với tiền nhé!)

Nếu không ghi hậu tố, mặc định số nguyên là int, số thực là double. Ví dụ, 42int, còn 3.14double.

Tại sao cần vậy? Ví dụ, để không bị lỗi khi gán số lớn cho biến kiểu long:


long bigNumber = 9000000000L; // nếu bỏ L sẽ bị lỗi biên dịch

Còn với tiền thì luôn dùng decimal với hậu tố m nhé:


decimal price = 999.99m;

4. Dấu gạch dưới _ trong số

Khi số dài quá, dễ bị hoa mắt vì nhiều số 0. Để dễ đọc, trong C# bạn có thể dùng dấu gạch dưới trong số.


int population = 146_700_000;
long stars = 100_000_000_000L;
Dùng dấu gạch dưới cho dễ đọc số

Cái này hoàn toàn hợp lệ: trình biên dịch sẽ bỏ qua dấu gạch dưới, còn bạn thì nhìn phát biết ngay số nào với số nào. Lưu ý — không đặt gạch dưới ở đầu, cuối, sau dấu chấm hoặc trước hậu tố.

5. Kiểu ký tự char

Đôi khi chương trình cần làm việc không phải với số, mà với ký tự riêng lẻ: chữ cái, số, dấu, thậm chí là khoảng trắng. Để làm việc này có kiểu riêng — char.

Kiểu char là gì?
Đây là biến lưu một ký tự:

  • chữ cái Latin hoặc Cyrillic ('A', 'я')
  • số ('5')
  • ký tự đặc biệt ('#', '%', '@')
  • ký tự điều khiển ('\\n' — xuống dòng)

Lưu ý:

  • Giá trị kiểu char viết trong dấu nháy đơn: char letter = 'B';
  • Thực ra bên trong charmã số của ký tự (theo Unicode), nên char có thể so sánh, chuyển sang int và thậm chí làm toán đơn giản:

char a = 'A';
char b = (char)(a + 1); // 'B'
int code = a;           // 65 — mã của 'A'

Có thể dùng ký tự đặc biệt, ví dụ: char tab = '\\t'; // ký tự tab

Tại sao cần char?
Để xử lý văn bản từng ký tự (ví dụ kiểm tra chữ đầu tiên trong chuỗi, tìm dấu câu, nhập mật khẩu từng ký tự).

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION