Về mặt kỹ thuật, điều này phụ thuộc vào ngôn ngữ, nhưng hầu như tất cả các ngôn ngữ đều đối xử với chủ đề này như nhau. Khi có kiểu không khớp giữa hai kiểu dữ liệu trong một biểu thức, hầu hết các ngôn ngữ sẽ cố gắng truyền dữ liệu ở một bên của biểu thức =
để khớp với dữ liệu ở phía bên kia theo một tập hợp các quy tắc được xác định trước.
Khi chia hai số cùng kiểu (số nguyên, số nhân đôi, v.v.), kết quả sẽ luôn cùng kiểu (vì vậy 'int / int' sẽ luôn dẫn đến kết quả là int).
Trong trường hợp này, bạn có
double var = integer result
phép tính kết quả số nguyên thành nhân đôi sau khi tính toán, trong trường hợp đó dữ liệu phân số đã bị mất. (hầu hết các ngôn ngữ sẽ thực hiện việc truyền kiểu này để ngăn chặn sự không chính xác của kiểu mà không đưa ra ngoại lệ hoặc lỗi).
Nếu bạn muốn giữ kết quả là một nhân đôi, bạn sẽ muốn tạo ra một tình huống mà bạn có
double var = double result
Cách dễ nhất để làm điều đó là buộc biểu thức ở bên phải của một phương trình được ép thành nhân đôi:
c = a/(double)b
Phép chia giữa số nguyên và số kép sẽ dẫn đến việc ép kiểu số nguyên thành số kép (lưu ý rằng khi làm toán, trình biên dịch thường "upcast" lên kiểu dữ liệu cụ thể nhất để tránh mất dữ liệu).
Sau khi upcast, a
sẽ kết thúc như một đôi và bây giờ bạn có sự phân chia giữa hai đôi. Điều này sẽ tạo ra sự phân chia và phân công mong muốn.
LẠI, xin lưu ý rằng đây là ngôn ngữ cụ thể (và thậm chí có thể là cụ thể cho trình biên dịch), tuy nhiên hầu hết tất cả các ngôn ngữ (chắc chắn là tất cả những ngôn ngữ mà tôi có thể nghĩ ra) đều coi ví dụ này giống hệt nhau.