In lingue fortemente tipizzate, il risultato delle operazioni matematiche è solitamente lo stesso tipo del tipo più grande.
C# ha una lista di implicit numeric conversions che farà.
Generalizzazione di questo elenco: i tipi di integrale possono essere convertiti in tipi in virgola mobile, ma non viceversa. I tipi integrali possono anche essere convertiti implicitamente in decimal
, ma i tipi a virgola mobile non possono.
Nota: questo significa anche che il cast di uno dei to in un altro tipo comporterà che l'intera risposta sia quel tipo. es: (decimal) a/b * 100.0 = 50.0
tl; dr:
In 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
Non funzionerà. a * 100/b tronca ancora il decimale e quindi converte in tipo decimale. Finiresti senza mantissa. – Armstrongest
c = (a * 100M)/b; Inoltre, vedi http://mathworld.wolfram.com/IntegerDivision.html – Greg