CĂN BẢN
NÂNG CAO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

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

Bài vừa rồi mình đã hướng dẫn các bạn về các kiểu dữ liệu trong C#. Những kiểu dữ liệu khác nhau có thể chứa những giá trị giống nhau. Vì thế trong một số trường hợp, ta cần đưa dữ liệu về dạng mong muốn, hay chuyển đổi sang một kiểu dữ liệu mới để dễ dàng thực hiện việc thao tác xử lý. Khi đó ta sẽ thực hiện việc ép kiểu dữ liệu (chuyển đổi kiểu dữ liệu này sang kiểu dữ liệu khác), vậy có bao nhiêu cách ép dữ liệu, và ép như thế nào. Ta hãy cùng nhau tìm hiểu nhé ! 

Ép kiểu có hai loại sau:

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.
  • Chuyển đổi kiểu ngầm định (implicit)
  • Chuyển đổi kiểu tường minh (explicit)

1. Chuyển đổi kiểu ngầm định (implicit)

Chuyển đổi ngầm định là việc chuyển đổi được thực hiện bởi trình biên dịch và chúng ta không cần tác động gì đến.

Việc chuyển đổi kiểu dữ liệu này được thực hiện khi muốn chuyển dữ kiệu nhỏ sang kiểu dữ liệu lớn hơn có nghĩa là kích thước kiểu dữ liệu trước phải nhỏ hơn kích thước của kiểu dữ liệu sau. Ví dụ: Chúng ta không thể chuyển kiểu dữ liệu float (4bytes) sang kiểu int (2bytes), vì ta thấy kích thước kiểu float lớn hơn so với kích thước kiểu int. Cho nên ta phải làm ngược lại: 

 

Ví dụ
int abc = 20;
float xyz = abc;
// Chuyển kiểu ngầm định vì kiểu float có miền giá trị lớn hơn kiểu int

 

2. Chuyển đổi kiểu tường minh (explicit)

Chuyển đổi tường minh là việc chuyển đổi được thực hiện một cách rõ ràng bởi yêu cầu của người lập trình bằng cách sử dụng các hàm được định nghĩa trước hay cần một toán tử cast.

Trong chuyển đổi kiểu tường minh, ta có thể chuyển kiểu dữ liệu lớn về kiểu dữ liệu có kích thước nhỏ hơn mà không báo lỗi. Nếu kiểu dữ liệu vượt quá miền giá trị của kiểu dữ liệu ta muốn ép về thì chương trình sẽ tự động cắt bit sao cho phù hợp với khả năng chứa kiểu dữ liệu đó.

Cú pháp: (<kiểu dữ liệu>) <biến cần ép kiểu>

 

Ví dụ
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace freetuts
 {
     class Program
      {
           static void Main(string[] args)
            {
                 int abc = 256;
                 //cast kiểu dữ liệu int thành kiểu dữ liệu byte 
                 byte xyz = (byte)abc;
                 Console.WriteLine("abc = " + abc);
                 Console.WriteLine("xyz = " + xyz);
                 Console.ReadKey();
             }
       }
  }

 

Kết quả chạy của chương trình trên là:

explicit PNG

Ta thấy 256 có mã nhị phân là 100000000 do kiểu byte có giới hạn chỉ đến 255 nên không thể chứa 256 được. Kiểu byte có kích thước là 1 byte tương đương với 8 bit, như vầy chương trình sẽ cắt mã nhị phân của 256 về còn 8 bit từ trái sang. Ta được 00000000 (đủ 8 bit) tương đương với 0. Vậy biến xyz sẽ mang giá trị là 0.

Lưu ý: Ban đầu ta thấy biến abc = 256 nhưng khi ép kiểu thì giá trị của xyz = 0. Vậy nên, khi ép kiểu dữ liệu chúng ta phải thật sự cẩn thận nếu không sẽ làm ảnh hưởng đến kết quả của toàn bộ bài toán.

Ngoài ra chúng ta còn có một số phương thức chuyển đổi kiểu dữ liệu trong C# nằm trong lớp tiện ích Convert.

Các đặc điểm của các phương thức trong lớp Convert:

  • Nếu tham số truyền vào là null thì các phương thức sẽ trả về giá trị mặc định của kiểu dữ liệu.
  • Nếu tham số truyền vào sai định dạng hay vượt quá giới hạn thì chương trình sẽ báo lỗi.
  • Các tham số truyền vào các phương thức có thể là mọi kiểu dữ liệu cơ bản.

Bảng các phương thức chuyển đổi kiểu có sẵn trong C#:

Phương thức Miêu tả
ToBoolean

Chuyển đổi một kiểu thành một giá trị Boolean nếu có thể

ToByte

Chuyển đổi một kiểu thành một byte

ToChar

Chuyển đổi một kiểu thành một Unicode Character, nếu có thể

ToDateTime

Chuyển đổi một kiểu (integer hoặc string) thành các cấu trúc datetime

ToDecimal

Chuyển đổi một kiểu số thực hoặc số nguyên thành kiểu thập phân

ToDouble

Chuyển một kiểu thành kiểu double

ToInt16

Chuyển đổi một kiểu thành một 16-bit integer

ToInt32

Chuyển đổi một kiểu thành một 32-bit integer

ToInt64

Chuyển đổi một kiểu thành một 64-bit integer

ToSbyte

Chuyển đổi một kiểu thành một kiểu signed byte

ToSingle

Chuyển đổi một kiểu thành một số small floating point

ToSing

Chuyển đổi một kiểu thành một String

ToType

Chuyển đổi một kiểu thành một kiểu đã xác định

ToUInt16

Chuyển đổi một kiểu thành kiểu unsigned int

ToUInt32

Chuyển đổi một kiểu thành unsigned long

ToUInt64

Chuyển đổi một kiểu thành một unsigned big integer

3. Ví dụ

Một ví dụ nhỏ minh họa cho việc chuyển đổi bằng hai phương pháp ép kiểu nêu trên:

 

Ví dụ
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace freetuts.net
{
    class freetuts
    {
        static void Main(string[] args)
        {
            int variable_1 = 16;
            double variable_2 = 211.98156;
         
            // IMPLICIT CASTING
            double result_1 = variable_1;
            Console.WriteLine("\ngia tri cua bien result_1 sau khi ep kieu = " + result_1);  // 16.0
         
            // EXPLICIT CASTING
            int result_2 = (int)variable_2;
            Console.WriteLine("\ngia tri cua bien result_2 sau khi ep kieu = " + result_2);  // 211
            
            Console.WriteLine("\n\n freetuts chuc ban hoc tot !!!");
            Console.ReadKey();

        }
    }
}

 

Biên dịch chương trình cho ta thấy kết quả:

ep kieu JPG

Ta thấy giá trị của biến result_1 = variable_1 vì kích thước của kiểu giá trị float > int nên giá trị của nó sau khi ép kiểu không thay đổi. Ngược lại, ở biến result_2 < variable_2 bởi vì kiểu int là kiểu số nguyên nên nó không thể chứa kiểu double được, vì vậy nên phần thập phân phía sau sẽ được làm tròn.

Có một loại ép kiểu chúng ta thường xuyên dùng đó là ép từ kiểu string sang kiểu số. Vì những gì nhập từ bàn phím đều cho giá trị là chuỗi nên ta cần thực hiện phép chuyển đổi này trước khi sử dụng:

 

Ví dụ
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace freetuts.net
{
    class freetuts
    {
        static void Main(string[] args)
        {
            int variable;
            Console.WriteLine("\nnhap vao mot so !");
            //variable = Console.ReadLine();// không thể gán được bởi vì variable là kiểu int
            variable = Convert.ToInt16(Console.ReadLine()); //thực hiện ép kiểu
            Console.WriteLine("\nso ban vua nhap: " + variable);
            Console.WriteLine("\n\n freetuts chuc ban hoc tot !!!");
            Console.ReadKey();
        }
    }
}

 

Biên dịch chương trình chúng ta sẽ nhận được kết quả:

ep kieu1 JPG

3. Kết luận

Vậy là qua bài này mình và các bạn đã tìm hiểu thế nào là ép kiểu, tại sao phải ép kiểu và các loại ép kiểu. Bài sau mình và các bạn sẽ cùng tìm hiểu biến và hằng trong C# nhé. Hẹn gặp lại các bạn, chúc các bạn học tốt và luôn đồng hành cùng freetuts.net nhé !

Cùng chuyên mục:

Cách dùng Stack (ngắn xếp) trong C#

Cách dùng Stack (ngắn xếp) trong C#

Mình sẽ giới thiệu về các đặc điểm, thuộc tính và phương thức của Stack…

Cách dùng Queue (hàng đợi) trong C#

Cách dùng Queue (hàng đợi) trong C#

Mình sẽ giới thiệu về các đặc điểm, thuộc tính, phương thức của Queue, cũng…

Cách dùng Hashtable (bảng băm) trong C#

Cách dùng Hashtable (bảng băm) trong C#

Cụ thể sẽ tìm hiểu Hashtable là gì? các đặc điểm của nó, cùng với…

Sự kiện Enter và Leave trong C# Winforms

Sự kiện Enter và Leave trong C# Winforms

Trong bài viết này mình sẽ hướng dẫn các bạn cách ...

Sự kiện KeyPress, KeyDown, KeyUp trong C# Winforms

Sự kiện KeyPress, KeyDown, KeyUp trong C# Winforms

Một câu hỏi được đặt ra là làm cách nào để có thể phát hiện…

Sắp xếp trộn trong C# (Merge Sort)

Sắp xếp trộn trong C# (Merge Sort)

Trong bài viết này mình sẽ hướng dẫn các bạn cách sắp xếp các ..

Sắp xếp nổi bọt trong C# (Bubble Sort)

Sắp xếp nổi bọt trong C# (Bubble Sort)

Trong bài viết này mình sẽ hướng dẫn các bạn cách sắp ...

Cách in ra hình tam giác ký tự * trong C#

Cách in ra hình tam giác ký tự * trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách ...

Cách tính tổng các số chẵn từ 1 đến N trong C#

Cách tính tổng các số chẵn từ 1 đến N trong C#

Trước khi đi vào viết chương trình, chúng ta cùng tìm hiểu qua số chẵn…

Cách tính tổng các số lẻ từ 1 đến N trong C#

Cách tính tổng các số lẻ từ 1 đến N trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách tính tổng các lẻ…

Cách đếm số chữ số của một số nguyên trong C#

Cách đếm số chữ số của một số nguyên trong C#

Chúng ta cùng xem qua một số ví dụ để hiểu rõ hơn về chương…

Cách tính chu vi và diện tích hình tam giác trong C#

Cách tính chu vi và diện tích hình tam giác trong C#

Tam giác là một loại hình cơ bản trong hình học, có ba đỉnh là…

Cách tính chu vi và diện tích hình tròn trong C#

Cách tính chu vi và diện tích hình tròn trong C#

Trước khi đi vào viết chương trình tính chu vi và diện ..

Cách tính chu vi và diện tích hình chữ nhật trong C#

Cách tính chu vi và diện tích hình chữ nhật trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn ...

Cách xóa phần tử trùng lặp khỏi mảng trong C#

Cách xóa phần tử trùng lặp khỏi mảng trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách loại bỏ các ..

Cách tìm tất cả các chuỗi con của chuỗi đã cho trong C#

Cách tìm tất cả các chuỗi con của chuỗi đã cho trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách tìm ...

Cách xóa các ký tự trùng lặp khỏi chuỗi trong C#

Cách xóa các ký tự trùng lặp khỏi chuỗi trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách xóa các ký tự…

Đếm số lần xuất hiện của ký tự trong chuỗi trong C#

Đếm số lần xuất hiện của ký tự trong chuỗi trong C#

Trong bài viết này minh sẽ hướng dẫn các bạn cách đếm ...

Cách chuyển đổi nhị phân sang thập phân trong C#

Cách chuyển đổi nhị phân sang thập phân trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách chuyển đổi số ...

Cách chuyển đổi thập phân sang nhị phân trong C#

Cách chuyển đổi thập phân sang nhị phân trong C#

Số nhị phân là các con số có cơ số là 2. Các số nhị…

Top