Các kiểu dữ liệu trong C#: Double, Số nguyên, Số float, Char

⚡ Tóm tắt thông minh

Các kiểu dữ liệu trong C# xác định loại giá trị mà một biến có thể chứa, từ số nguyên và số thực đến giá trị Boolean và chuỗi, và chúng quyết định lượng bộ nhớ mà mỗi biến chiếm dụng trong quá trình thực thi chương trình.

  • 🔢 Các kiểu số nguyên: Từ khóa Int32 (int) lưu trữ các số nguyên như 10, 20 hoặc 30 trong một phạm vi bộ nhớ cố định.
  • 🔣 Các kiểu dữ liệu dấu phẩy động: Kiểu dữ liệu double và float lưu trữ các giá trị thập phân, trong đó decimal cung cấp độ chính xác cao hơn cho các phép tính tài chính.
  • ☑️ Kiểu dữ liệu Boolean: Từ khóa Boolean chỉ lưu trữ giá trị true hoặc false và dùng để điều khiển logic điều kiện.
  • 🔤 Các loại văn bản: Kiểu dữ liệu `char` chứa một ký tự đơn, còn kiểu `string` lưu trữ một chuỗi ký tự dưới dạng văn bản.
  • 🧩 Giá trị thực so với giá trị tham chiếu: Các kiểu dữ liệu giá trị lưu trữ dữ liệu trực tiếp, trong khi các kiểu dữ liệu tham chiếu như chuỗi (string) lưu trữ địa chỉ bộ nhớ.
  • 🤖 Hỗ trợ AI: GitHub Copilot và ML.NET mang đến tính năng gợi ý mã và học máy cho việc xử lý kiểu dữ liệu trong C#.

Các kiểu dữ liệu trong C#

Các kiểu dữ liệu trong C# là gì?

Ngôn ngữ C# đi kèm với một tập hợp các kiểu dữ liệu Cơ bản. Các kiểu dữ liệu này được sử dụng để xây dựng các giá trị được sử dụng trong một ứng dụng. Hãy cùng khám phá các kiểu dữ liệu cơ bản có sẵn trong C#. Đối với mỗi ví dụ, chúng tôi sẽ chỉ sửa đổi hàm chính trong tệp Program.cs của mình.

1) Số nguyên

Kiểu dữ liệu Số nguyên được sử dụng để làm việc với các số. Trong trường hợp này, các số là các số nguyên như 10, 20 hoặc 30. Trong C#, kiểu dữ liệu được biểu thị bằng Từ khóa Int32. Dưới đây là một ví dụ về cách sử dụng kiểu dữ liệu này. Trong ví dụ của chúng tôi, chúng tôi sẽ xác định một biến Int32 có tên là num. Sau đó chúng ta sẽ gán một giá trị Integer cho biến và hiển thị nó tương ứng.

Các kiểu dữ liệu số nguyên trong C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Program
 { 
  static void Main(string[] args) 
  {
   Int32 num=30;
   Console.Write(num);  
   
   Console.ReadKey();
  }
 }
}

Code Giải trình:-

  1. Kiểu dữ liệu Int32 được chỉ định để khai báo một biến Số nguyên có tên là num. Biến sau đó được gán giá trị 30.
  2. Cuối cùng, hàm console.write được sử dụng để hiển thị số ra bàn điều khiển.

Nếu mã trên được nhập đúng và chương trình được thực thi thành công, kết quả sau sẽ được hiển thị.

Đầu ra:

Các kiểu dữ liệu số nguyên trong C#

Từ kết quả đầu ra, bạn có thể thấy rõ biến Số nguyên có tên num đã được hiển thị trong bảng điều khiển

2) Double

Kiểu dữ liệu double được sử dụng để làm việc với số thập phân. Trong trường hợp này, các số là số nguyên như 10.11, 20.22 hoặc 30.33. Trong C#, kiểu dữ liệu được biểu thị bằng từ khóa “Double“. Dưới đây là một ví dụ về kiểu dữ liệu này.

Trong ví dụ của chúng tôi, chúng tôi sẽ định nghĩa một biến double được gọi là num. Sau đó chúng tôi sẽ gán một Double giá trị cho biến và sau đó hiển thị nó cho phù hợp.

Double Các kiểu dữ liệu trong C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Program
 { 
  static void Main(string[] args) 
  {
   double num=30.33;
   Console.Write(num); 
   
   Console.ReadKey();
  }
 }
}

Code Giải trình:-

  1. Kiểu dữ liệu double được chỉ định để khai báo một kiểu double biến gọi là số. Biến sau đó được gán giá trị 30.33.
  2. Cuối cùng, hàm console.write được sử dụng để hiển thị số ra bàn điều khiển.

Nếu mã trên được nhập đúng và chương trình được thực thi thành công, kết quả sau sẽ được hiển thị.

Đầu ra:

Double Các kiểu dữ liệu trong C#

Từ đầu ra, bạn có thể thấy rõ ràng rằng biến double có tên là num đã được hiển thị trong bảng điều khiển

3) Boolean

Kiểu dữ liệu boolean được sử dụng để làm việc với các giá trị Boolean của đúng và sai. Trong C#, kiểu dữ liệu được biểu thị bằng từ khóa Boolean. Dưới đây là một ví dụ về kiểu dữ liệu này có thể được sử dụng.

Trong ví dụ của chúng ta, chúng ta sẽ định nghĩa một biến Boolean có tên là 'status'. Sau đó chúng ta sẽ gán giá trị boolean cho biến và hiển thị giá trị đó cho phù hợp.

Các kiểu dữ liệu Boolean trong C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Program
  { 
   static void Main(string[] args) 
   {
    Boolean status=true;
    Console.Write(status);
    
    Console.ReadKey();
   }
  }
}

Code Giải trình:-

  1. Kiểu dữ liệu boolean được chỉ định để khai báo một biến Boolean được gọi là 'status.' Biến sau đó được gán giá trị đúng/sai.
  2. Cuối cùng, hàm console.write được sử dụng để hiển thị giá trị Boolean ra bàn điều khiển.

Nếu đoạn mã trên được nhập đúng và chương trình được thực thi thành công, kết quả sẽ được hiển thị.

Đầu ra:

Các kiểu dữ liệu Boolean trong C#

Từ kết quả đầu ra, bạn có thể thấy rõ biến Boolean bằng true đã được hiển thị trong bảng điều khiển

4) Chuỗi

Kiểu dữ liệu Chuỗi được sử dụng để làm việc với các giá trị Chuỗi. Trong C#, kiểu dữ liệu được biểu thị bằng từ khóa 'Chuỗi'. Dưới đây là một ví dụ về kiểu dữ liệu này.

Trong ví dụ của chúng tôi, chúng tôi sẽ xác định một biến Chuỗi có tên là 'message.' Sau đó chúng ta sẽ gán giá trị Chuỗi cho biến và hiển thị giá trị đó cho phù hợp.

Các kiểu dữ liệu chuỗi trong C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class program
 {
  static void Main(string[] args)
  {
   String message="Hello";
   Console.Write(message);
   
   Console.ReadKey();
  }
 }
}

Code Giải trình:-

  1. Kiểu dữ liệu Chuỗi được chỉ định để khai báo một biến chuỗi có tên là message. Biến sau đó được gán giá trị là “Xin chào”.
  2. Cuối cùng, hàm console.write được sử dụng để hiển thị giá trị chuỗi ra bàn điều khiển.

Nếu đoạn mã trên được nhập đúng và chương trình được thực thi thành công, kết quả sẽ được hiển thị.

Đầu ra:

Các kiểu dữ liệu chuỗi trong C#

Từ kết quả đầu ra, bạn có thể thấy rõ biến String có tên là message đã được hiển thị trong bảng điều khiển

Danh sách đầy đủ các kiểu dữ liệu trong C#

Bốn ví dụ trên bao gồm các kiểu dữ liệu phổ biến nhất, nhưng C# cung cấp đầy đủ các kiểu dữ liệu giá trị tích hợp sẵn. Mỗi kiểu dữ liệu dành một lượng bộ nhớ cố định và chấp nhận một phạm vi giá trị cụ thể, vì vậy việc chọn kiểu dữ liệu nhỏ nhất phù hợp với dữ liệu của bạn sẽ giúp chương trình hoạt động hiệu quả.

Loại dữ liệu Kích thước máy Phạm vi / Description
byte Byte 1 0 để 255
ngắn 2 byte -32,768 32,767
int (Int32) 4 byte -2,147,483,648 2,147,483,647
Dài 8 byte Các số nguyên rất lớn (±9.2 triệu tỷ)
phao 4 byte Số thập phân với độ chính xác khoảng 6–7 chữ số.
tăng gấp đôi 8 byte Số thập phân với độ chính xác khoảng 15–16 chữ số.
số thập phân 16 byte Số thập phân có độ chính xác cao (28–29 chữ số) dùng cho tiền tệ
xe tăng 2 byte Một ký tự Unicode đơn
bool Byte 1 đúng hay sai

Bên cạnh các kiểu giá trị, kiểu chuỗi là kiểu tham chiếu được sử dụng rộng rãi nhất và lưu trữ một chuỗi ký tự có độ dài bất kỳ. Việc chọn kiểu phù hợp giúp ngăn ngừa lỗi tràn bộ nhớ và sử dụng bộ nhớ không cần thiết.

Kiểu giá trị so với kiểu tham chiếu trong C#

Mỗi kiểu dữ liệu trong C# đều thuộc một trong hai nhóm: kiểu giá trị và kiểu tham chiếu. Sự phân biệt này quyết định cách C# lưu trữ dữ liệu và cách một biến hoạt động khi bạn sao chép nó hoặc truyền nó vào một phương thức.

  • Các loại giá trị: Các kiểu dữ liệu này lưu trữ dữ liệu thực tế trực tiếp, thường là trên ngăn xếp. int, double, bool, char, liệt kê`<struct>` và `<value>` là các kiểu dữ liệu giá trị. Việc gán giá trị cho một biến sẽ sao chép giá trị đó, do đó hai biến vẫn độc lập với nhau.
  • Các loại tham chiếu: Các biến tham chiếu lưu trữ một tham chiếu (địa chỉ bộ nhớ) trỏ đến dữ liệu trên heap. Chuỗi, đối tượng, mảng và các thể hiện của lớp là các kiểu tham chiếu. Việc sao chép một biến tham chiếu chỉ sao chép địa chỉ, do đó cả hai biến đều chia sẻ cùng một đối tượng.

Biến kiểu giá trị không bao giờ có thể là null vì nó luôn chứa một giá trị, trong khi biến kiểu tham chiếu chưa được khởi tạo mặc định là null. Hiểu được sự khác biệt này giúp bạn dự đoán cách các thay đổi dữ liệu được truyền tải trong chương trình.

Chuyển đổi kiểu dữ liệu trong C#

C# thường xuyên cần chuyển đổi giá trị từ kiểu dữ liệu này sang kiểu dữ liệu khác, chẳng hạn như chuyển đổi dữ liệu người dùng nhập vào (luôn là văn bản) thành số. Quá trình này được gọi là chuyển đổi kiểu dữ liệu, và nó diễn ra theo ba cách chính.

  • Chuyển đổi ngầm định: Trình biên dịch sẽ tự động chuyển đổi khi không có nguy cơ mất dữ liệu, chẳng hạn như khi gán một số nguyên cho một số thực. Không cần cú pháp đặc biệt nào.
  • Chuyển đổi tường minh (ép kiểu): Bạn đặt kiểu dữ liệu mục tiêu trong dấu ngoặc đơn, ví dụ: (int)myDoubleViệc ép kiểu có thể làm mất dữ liệu — chuyển đổi từ kiểu double sang int sẽ làm mất phần thập phân — vì vậy bạn chấp nhận rủi ro đó một cách có chủ ý.
  • Các phương thức hỗ trợ: Lớp Convert (Convert.ToInt32) và phương thức Parse của mỗi kiểu dữ liệu (int.Parse) chuyển đổi chuỗi thành số, trong khi ToString chuyển đổi giá trị trở lại thành văn bản dễ đọc.

Việc lựa chọn phương thức chuyển đổi chính xác giúp đảm bảo tính chính xác của dữ liệu và ngăn ngừa lỗi trong quá trình chạy khi kiểu dữ liệu ở hai phía của phép gán không khớp nhau.

Câu Hỏi Thường Gặp

Các kiểu dữ liệu float, double và decimal đều lưu trữ số thập phân nhưng khác nhau về độ chính xác và kích thước. Float sử dụng 4 byte với khoảng 7 chữ số, double sử dụng 8 byte với khoảng 15 chữ số, và decimal sử dụng 16 byte cho các giá trị tài chính có độ chính xác cao.

Thực chất không có sự khác biệt nào. `int` là một bí danh trong C# cho kiểu dữ liệu `System.Int32` của .NET, vì vậy `int` và `Int32` khi biên dịch đều cho ra kết quả giống hệt nhau. Hầu hết các nhà phát triển viết `int` để ngắn gọn hơn, trong khi `Int32` làm rõ kiểu dữ liệu cơ bản của framework.

Chuỗi (string) là một kiểu tham chiếu, vì nó lưu trữ một tham chiếu đến dữ liệu ký tự được giữ trên vùng nhớ heap. Tuy nhiên, nó hoạt động giống như một kiểu giá trị ở một khía cạnh: chuỗi là bất biến, do đó mọi thay đổi đều tạo ra một đối tượng chuỗi mới thay vì chỉnh sửa đối tượng cũ.

Kiểu dữ liệu có thể null cho phép một kiểu giá trị như int hoặc bool cũng có thể chứa giá trị null, được viết kèm dấu chấm hỏi ở cuối, ví dụ như int?. Điều này hữu ích cho dữ liệu tùy chọn và các trường trong cơ sở dữ liệu, nơi giá trị thiếu phải được biểu thị khác biệt với số không hoặc false.

Kiểu dữ liệu `char` chứa chính xác một ký tự Unicode và sử dụng dấu ngoặc đơn, ví dụ như 'A'. Kiểu dữ liệu `string` chứa một chuỗi gồm không hoặc nhiều ký tự và sử dụng dấu ngoặc kép. `char` là kiểu giá trị, trong khi `string` là kiểu tham chiếu.

Từ khóa `var` suy luận kiểu dữ liệu của biến tại thời điểm biên dịch, và kiểu dữ liệu đó sau đó được cố định với đầy đủ hỗ trợ IntelliSense. Từ khóa `dynamic` trì hoãn việc kiểm tra kiểu dữ liệu đến thời điểm chạy, do đó lỗi kiểu dữ liệu chỉ xuất hiện trong quá trình thực thi. Sử dụng `var` để đảm bảo an toàn và `dynamic` cho các trường hợp linh hoạt, liên kết muộn.

Đúng vậy. GitHub Copilot đề xuất các khai báo kiểu, chuyển đổi và mã mẫu bên trong Visual Studio và Visual Studio CodeNó có thể đề xuất một kiểu dữ liệu số phù hợp hoặc tạo mã phân tích cú pháp, nhưng bạn nên xem lại kết quả đầu ra của nó, vì các đề xuất có thể bỏ sót các vấn đề về độ chính xác hoặc tràn số.

Đúng vậy. ML.NET ánh xạ các kiểu dữ liệu C# sang các đặc trưng của mô hình, sử dụng các kiểu số như float và double cho dữ liệu huấn luyện và string cho văn bản. Các lớp dữ liệu được định kiểu mạnh mô tả từng cột, do đó các mô hình học máy tích hợp một cách tự nhiên vào các ứng dụng C#.

Tóm tắt bài viết này với: