Chuyển đổi loại C
Chuyển đổi loại
Đôi khi, bạn phải chuyển đổi giá trị của kiểu dữ liệu này sang kiểu khác. Điều này được gọi là chuyển đổi loại .
Ví dụ: nếu bạn cố chia hai số nguyên, 5
cho 2
, bạn sẽ mong đợi kết quả là 2.5
. Nhưng vì chúng ta đang làm việc với các số nguyên (chứ không phải các giá trị dấu phẩy động), nên ví dụ sau sẽ chỉ xuất ra 2
:
Để có được kết quả đúng, bạn cần biết cách chuyển đổi loại hoạt động.
Có hai loại chuyển đổi trong C:
- Chuyển đổi ngầm định (tự động)
- Chuyển đổi rõ ràng (thủ công)
Chuyển đổi ngầm định
Việc chuyển đổi ngầm định được trình biên dịch thực hiện tự động khi bạn gán giá trị của loại này cho loại khác.
Ví dụ: nếu bạn gán giá trị int
cho kiểu float
:
Ví dụ
// Automatic conversion: int to float
float myFloat = 9;
printf("%f",
myFloat); // 9.000000
Hãy tự mình thử » Như bạn có thể thấy, trình biên dịch tự động chuyển đổi giá trị int 9
thành giá trị float là 9.000000
.
Điều này có thể nguy hiểm vì bạn có thể mất quyền kiểm soát các giá trị cụ thể trong một số trường hợp nhất định.
Đặc biệt nếu ngược lại - ví dụ sau sẽ tự động chuyển đổi giá trị float 9.99
thành giá trị int là 9
:
Ví dụ
// Automatic conversion: float to int
int myInt = 9.99;
printf("%d",
myInt); // 9
Hãy tự mình thử » Chuyện gì đã xảy ra với .99
? Chúng tôi có thể muốn dữ liệu đó trong chương trình của chúng tôi! Vì vậy hãy cẩn thận. Điều quan trọng là bạn phải biết trình biên dịch hoạt động như thế nào trong những tình huống này để tránh những kết quả không mong muốn.
Một ví dụ khác, nếu bạn chia hai số nguyên: 5
cho 2
, bạn biết tổng đó là 2.5
. Và như bạn đã biết từ đầu trang này, nếu bạn lưu tổng dưới dạng số nguyên thì kết quả sẽ chỉ hiển thị số 2
. Vì vậy, sẽ tốt hơn nếu lưu tổng dưới dạng float
hoặc double
, phải không?
Tại sao kết quả là 2.00000
mà không phải 2.5
? Vâng, đó là vì 5 và 2 vẫn là số nguyên trong phép chia. Trong trường hợp này, bạn cần chuyển đổi thủ công các giá trị số nguyên thành giá trị dấu phẩy động. (xem bên dưới).
Chuyển đổi rõ ràng
Chuyển đổi rõ ràng được thực hiện thủ công bằng cách đặt loại trong dấu ngoặc đơn ()
trước giá trị.
Xem xét vấn đề của chúng ta từ ví dụ trên, bây giờ chúng ta có thể nhận được kết quả đúng:
Ví dụ
// Manual conversion: int to float
float sum = (float) 5 / 2;
printf("%f",
sum); // 2.500000
Hãy tự mình thử »Bạn cũng có thể đặt kiểu này trước một biến:
Ví dụ
int num1 = 5;
int num2 = 2;
float sum = (float) num1 / num2;
printf("%f",
sum); // 2.500000
Hãy tự mình thử »Và vì bạn đã học về "độ chính xác thập phân" ở chương trước, nên bạn có thể làm cho kết quả đầu ra rõ ràng hơn bằng cách loại bỏ các số 0 dư thừa (nếu bạn muốn):
Ví dụ
int num1 = 5;
int num2 = 2;
float sum = (float) num1 / num2;
printf("%.1f",
sum); // 2.5
Hãy tự mình thử »Ví dụ thực tế
Dưới đây là ví dụ thực tế về loại dữ liệu và chuyển đổi loại trong đó chúng tôi tạo chương trình để tính tỷ lệ phần trăm điểm của người dùng so với điểm tối đa trong trò chơi:
Ví dụ
// Set the maximum possible score in the game to 500
int maxScore = 500;
// The actual score of the user
int userScore = 423;
/*
Calculate the percantage of the user's score in relation to the maximum
available score.
Convert userScore to float to make sure that the division
is accurate */
float percentage = (float) userScore / maxScore * 100.0;
// Print the percentage
printf("User's percentage is %.2f", percentage);
Hãy tự mình thử »