Um dos aspetos fundamentais de trabalhar com números em C# é a distinção entre inteiros (números sem algarismos depois do separador decimal) e números de vírgula flutuante (números com zero ou mais algarismos depois do separador decimal).
Os dois tipos numéricos mais usados em C# são o int (um inteiro de 32 bits) e o double (um número de vírgula flutuante de 64 bits).
int i = 123;
double d = 54.29;
Tanto os inteiros como os números de vírgula flutuante podem usar o caráter _ como separador de algarismos, o que ajuda quando defines números grandes:
int largeInt = 1_000_000;
// => 1000000
double largeDouble = 9_876_543.21;
// => 9876543.21
A aritmética é feita com os operadores aritméticos padrão (+, -, *, etc.). Os números podem ser comparados com os operadores de comparação padrão (<, >=, etc.), o operador de igualdade (==) e o operador de desigualdade (!=).
5 * 6;
// => 30
1.2 > 0.8
// => true
2 != 4
// => true
Quando convertes entre tipos numéricos, existem dois tipos de conversões numéricas:
Como um int tem menos precisão do que um double, converter de um int para um double é seguro e é, por isso, uma conversão implícita. No entanto, converter de um double para um int pode significar perder dados, pelo que exige uma conversão explícita.
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;