L'un des aspects essentiels du travail avec les nombres en C# est la distinction entre les entiers (les nombres sans chiffre après le séparateur décimal) et les nombres à virgule flottante (les nombres avec zéro ou plusieurs chiffres après le séparateur décimal).
Les deux types numériques les plus couramment utilisés en C# sont int (un entier de 32 bits) et double (un nombre à virgule flottante de 64 bits).
int i = 123;
double d = 54.29;
Les entiers comme les nombres à virgule flottante peuvent utiliser le caractère _ comme séparateur de chiffres, ce qui peut être utile quand on définit de grands nombres :
int largeInt = 1_000_000;
// => 1000000
double largeDouble = 9_876_543.21;
// => 9876543.21
Les opérations arithmétiques se font avec les opérateurs arithmétiques standard (+, -, *, etc.). On peut comparer les nombres avec les opérateurs de comparaison standard (<, >=, etc.), ainsi qu'avec l'opérateur d'égalité (==) et l'opérateur d'inégalité (!=).
5 * 6;
// => 30
1.2 > 0.8
// => true
2 != 4
// => true
Quand on convertit un type numérique en un autre, il existe deux types de conversions numériques :
Comme un int est moins précis qu'un double, convertir un int en double est sûr, et il s'agit donc d'une conversion implicite. En revanche, convertir un double en int peut entraîner une perte de données, ce qui nécessite une conversion explicite.
int i = 9;
double d = 2.66;
// Safe conversion, thus implicit conversion
double fromInt = i;
// Potentially unsafe conversion, thus explicit conversion
int fromDouble = (int)d;