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

Ngày đăng: 2023-04-30 19:22:32

Mục lục

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 thuanhoaonline

 {

     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à:

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 thuanhoaonline

{

    class thuanhoaonline

    {

        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 thuanhoaonline chuc ban hoc tot !!!");

            Console.ReadKey();

 

        }

    }

}

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

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 thuanhoaonline

{

    class thuanhoaonline

    {

        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 thuanhoaonline chuc ban hoc tot !!!");

            Console.ReadKey();

        }

    }

}

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

 

 

Về bài trước...

                                  Bài tiếp theo...


Tài liệu lập trình C#

Bài viết trong cùng chuyên mục

Góc games giải trí



Cờ caro


Butterfly


Lật hình (luyện trí nhớ)

Cờ tướng ONLINE

Xếp hình

Ghép hình

15_PUZZLE

Kill ghosts

Banchim

Planet Defense

Tower game

Tower game

Plapy Bird (NH.Đông)

Vượt chướng ngại vật



0379136392

Thông tin liên hệ: Lê Văn Thuyên - ĐT: 0379136392 ; Gmail: lethuyen0379136392@gmail.com

Comment

 +   Lê Văn Thuyên-0379136392:Cảm ơn quý vị và các bạn đã vào Website của Lê Thuyên! Lê thuyên rất mong nhận được sự góp ý của quý vị và các bạn cho sự phát triển của website này. Xin chân thành cảm ơn!

Trả lời

 *   Dũng Trung-090567448:Lê Văn Thuyên0379136392--->Ok.Anh!

Trả lời

 *   Bé Nguyễn-benguyen@gmail,com:Lê Văn Thuyên0379136392--->Good job!

Trả lời

 +   -:

Trả lời

 +   -:

Trả lời

12117