Làm việc với các dạng và casting khác nhau trong C# (tiếp tục)
Các casting và chuyển đổi cũng chữa lỗi vấn đề thứ hai cái pha trộn các dạng có thể gây ra. Xem xét code sau:
int amountDone = 20;
int amountToDo = 100;
double fractionDone = amountDone / amountToDo;
Vì amountDone và amountToDo cả hai là ints, phép chia được thực hiện như phép chia số nguyên, cung cấp cho bạn
một giá trị bằng 0. (Phép chia số nguyên ditch các giá trị phân số, và 0.2 trở thành một số 0 đơn giản). Giá trị
int này là 0 sau đó ngầm định được chuyển đổi thành một double (0.0). Nhưng cái đó có thể không là cái được ý định.
Nếu chúng ta chuyển đổi hoặc phần liên quan đến phép chia thành một double, thì phép chia xảy ra với phép chia dấu
phẩy động thay vào đó:
int amountDone = 20;
int amountToDo = 100;
double fractionDone = (double)amountDone / amountToDo;
Bây giờ, chuyển đổi amountDone thành một double được thực hiện trước tiên. Phép chia không được định nghĩa giữa một
double và một int, nhưng nó được định nghĩa giữa hai doubles. Chương trình biết nó có thể ngầm định chuyển đổi
amountToDo thành một double để tạo điều kiện cho cái đó. Nên amountToDo được xúc tiến thành một double, và bây giờ phép chia xảy ra giữa hai doubles sử dụng phép chia dấu phẩy động, và kết quả là 0.2. Tại điểm này, biểu thức đã là một double, nên không chuyển đổi thêm được cần để gán giá trị cho fractionDone.
Theo dõi các biểu thức phức tạp làm việc như thế nào có thể là mẹo mực. Nó trở nên dễ dàng hơn với thực hành, nhưng
đừng ngại chia tách các phần thành các dòng riêng rẽ để làm nó dễ dàng hơn để nghĩ qua.