Trong các ngôn ngữ được nhập mạnh, kết quả của phép toán thường là loại tương tự như loại lớn hơn.
C# có danh sách implicit numeric conversions nó sẽ thực hiện.
Việc tổng hợp danh sách này: Các loại tích phân có thể được chuyển đổi thành loại dấu phẩy động, nhưng không phải ngược lại. Các loại tích phân cũng có thể được chuyển đổi hoàn toàn thành decimal
, nhưng các loại điểm động không thể.
Lưu ý: Điều này cũng có nghĩa là truyền một trong các int sang loại khác sẽ dẫn đến toàn bộ câu trả lời là loại đó. ví dụ: (decimal) a/b * 100.0 = 50.0
tl; dr:
Trong C#:
int/int = int
int + decimal = decimal
decimal + int = decimal
int/int * decimal = (int/int = int) * decimal = decimal
int - float = float
int * double = double
float/decimal = an error
int - uint = an error (either that or ulong)
c = (a * 100)/b; – kenny
Điều đó sẽ không hoạt động. a * 100/b vẫn cắt ngắn số thập phân và sau đó chuyển thành kiểu thập phân. Bạn sẽ không có mantissa. – Armstrongest
c = (a * 100M)/b; Ngoài ra, hãy xem http://mathworld.wolfram.com/IntegerDivision.html – Greg