En los lenguajes fuertemente tipados, el resultado de las operaciones matemáticas suele ser del mismo tipo que el tipo más grande.
C# tiene una lista de implicit numeric conversions que hará.
Generalizando esta lista: los tipos integrales se pueden convertir a tipos de coma flotante, pero no al revés. Los tipos integrales también se pueden convertir implícitamente a decimal
, pero los tipos de coma flotante no pueden.
Nota: Esto también significa que la conversión de una de las entradas a otro tipo dará como resultado que toda la respuesta sea de ese tipo. ex: (decimal) a/b * 100.0 = 50.0
tl; dr:
En 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
Eso no funcionará. a * 100/b aún trunca el decimal y luego lo convierte a tipo decimal. Terminas sin mantisa. – Armstrongest
c = (a * 100M)/b; Además, consulte http://mathworld.wolfram.com/IntegerDivision.html – Greg