Como usar números inteiros e de ponto flutuante em C#
Este tutorial ensina sobre os tipos numéricos em C#. Você escreve pequenas quantidades de código e, em seguida, compila e executa esse código. O tutorial contém uma série de lições que exploram números e operações matemáticas em C#. Estas lições ensinam os fundamentos da linguagem C#.
Dica
Quando um bloco de trecho de código inclui o botão "Executar", esse botão abre a janela interativa ou substitui o código existente na janela interativa. Quando o trecho não inclui um botão "Executar", você pode copiar o código e adicioná-lo à janela interativa atual.
Explore a matemática dos números inteiros
Execute o seguinte código na janela interativa.
int a = 18;
int b = 6;
int c = a + b;
Console.WriteLine(c);
O código anterior demonstra operações matemáticas fundamentais com números inteiros. O tipo int
representa um número inteiro , um número inteiro positivo ou negativo. Utiliza-se o símbolo +
para adição. Outras operações matemáticas comuns para inteiros incluem:
-
-
para subtração -
*
para multiplicação -
/
para a divisão
Comece por explorar essas diferentes operações. Modifique a terceira linha para tentar cada uma dessas operações. Por exemplo, para tentar a subtração, substitua o +
por um -
conforme mostrado na linha a seguir:
int c = a - b;
Experimente. Selecione o botão "Executar". Em seguida, tente multiplicação, *
, e divisão, /
. Você também pode experimentar escrevendo várias operações matemáticas na mesma linha, se desejar.
Dica
Ao explorar C# (ou qualquer linguagem de programação), você comete erros ao escrever código. O compilador encontra esses erros e os relata para você. Quando a saída contiver mensagens de erro, observe atentamente o código de exemplo e o código na janela interativa para ver o que corrigir. Esse exercício ajuda você a aprender a estrutura do código C#.
Explore a ordem de operações
A linguagem C# define a precedência de diferentes operações matemáticas com regras consistentes com as regras que você aprendeu em matemática. A multiplicação e a divisão têm precedência sobre a adição e a subtração. Explore isso executando o seguinte código na janela interativa:
int a = 5;
int b = 4;
int c = 2;
int d = a + b * c;
Console.WriteLine(d);
A saída demonstra que a multiplicação é realizada antes da adição.
Você pode forçar uma ordem diferente de operação adicionando parênteses em torno da operação ou operações que deseja executar primeiro. Adicione as seguintes linhas à janela interativa:
d = (a + b) * c;
Console.WriteLine(d);
Explore mais combinando muitas operações diferentes. Substitua a quarta linha no código anterior por algo assim:
d = (a + b) - 6 * c + (12 * 4) / 3 + 12;
Console.WriteLine(d);
Você pode notar um comportamento interessante para números inteiros. A divisão inteira sempre produz um resultado inteiro, mesmo quando você esperaria que o resultado incluísse uma parte decimal ou fracionária.
Tente o seguinte código:
int a = 7;
int b = 4;
int c = 3;
int d = (a + b) / c;
Console.WriteLine(d);
Explore a precisão e os limites de números inteiros
Esse último exemplo mostrou que a divisão inteira trunca o resultado. Você pode obter o restante usando o operador restante, o caractere %
:
int a = 7;
int b = 4;
int c = 3;
int d = (a + b) / c;
int e = (a + b) % c;
Console.WriteLine($"quotient: {d}");
Console.WriteLine($"remainder: {e}");
O tipo inteiro C# difere dos inteiros matemáticos de uma outra maneira: o tipo int
tem limites mínimos e máximos. Tente o seguinte código para ver esses limites:
int max = int.MaxValue;
int min = int.MinValue;
Console.WriteLine($"The range of integers is {min} to {max}");
Se um cálculo produzir um valor que exceda esses limites, terá uma condição de subfluxo ou de estouro. A resposta parece fluir de um limite para o outro. Para ver um exemplo, adicione estas duas linhas na janela interativa:
int what = max + 3;
Console.WriteLine($"An example of overflow: {what}");
Observe que a resposta está muito próxima do número inteiro mínimo (negativo). É o mesmo que min + 2
. A operação de adição transbordou os valores permitidos para inteiros. A resposta é um grande número negativo porque um overflow "salta" do maior valor inteiro possível para o menor.
Existem outros tipos numéricos com limites e precisão diferentes que você usaria quando o tipo int
não atende às suas necessidades. Vamos explorar esses tipos de números a seguir.
Trabalhar com o tipo duplo
O tipo numérico double
representa um número de ponto flutuante de precisão dupla. Esses termos podem ser novos para você. Um ponto flutuante número é útil para representar números não integrais que podem ser grandes ou pequenos em magnitude.
de precisão dupla é um termo relativo que descreve o número de dígitos binários usados para armazenar o valor. Os números de precisão dupla têm o dobro do número de dígitos binários que os números de precisão única. Em computadores modernos, é mais comum usar precisão dupla do que números de precisão simples.
Os números de precisão simples são declarados usando a palavra-chave float
. Vamos explorar. Execute o seguinte código e veja o resultado:
double a = 5;
double b = 4;
double c = 2;
double d = (a + b) / c;
Console.WriteLine(d);
Observe que a resposta inclui a parte decimal do quociente. Tente uma expressão um pouco mais complicada com números do tipo double. Você pode usar os seguintes valores ou substituir outros números:
double a = 19;
double b = 23;
double c = 8;
double d = (a + b) / c;
Console.WriteLine(d);
O intervalo de um valor duplo é maior do que os valores inteiros. Tente o seguinte código na janela interativa:
double max = double.MaxValue;
double min = double.MinValue;
Console.WriteLine($"The range of double is {min} to {max}");
Estes valores são impressos em notação científica. O número antes do E
é o significante. O número após o E
é o expoente, como uma potência de 10.
Assim como os números decimais em matemática, os duplos em C# podem ter erros de arredondamento. Experimente este código:
double third = 1.0 / 3.0;
Console.WriteLine(third);
Você sabe que 0.3
é 3/10
e não exatamente o mesmo que 1/3
. Da mesma forma, 0.33
é 33/100
. Esse valor está mais próximo de 1/3
, mas ainda não é exato. Não importa quantas casas decimais você adicionar, um erro de arredondamento permanece.
Desafio
Tente outros cálculos com números grandes, números pequenos, multiplicação e divisão usando o tipo double
. Tente cálculos mais complicados.
Trabalhar com tipos decimais
Há outro tipo a aprender: o tipo decimal
. O tipo decimal
tem um alcance menor, mas maior precisão do que double
. Vejamos:
decimal min = decimal.MinValue;
decimal max = decimal.MaxValue;
Console.WriteLine($"The range of the decimal type is {min} to {max}");
Observe que o intervalo é menor do que o tipo double
. Você pode ver a maior precisão com o tipo decimal tentando o seguinte código:
double a = 1.0;
double b = 3.0;
Console.WriteLine(a / b);
decimal c = 1.0M;
decimal d = 3.0M;
Console.WriteLine(c / d);
Observe que a matemática usando o tipo decimal tem mais dígitos à direita do ponto decimal.
O sufixo M
nos números é como você indica que uma constante deve usar o tipo decimal
. Caso contrário, o compilador assume o tipo double
.
Observação
A letra M
foi escolhida como a letra visualmente mais distinta entre as palavras-chave double
e decimal
.
Desafio
Escreva um código que calcule a área de um círculo cujo raio é de 2,50 centímetros. Lembre-se que a área de um círculo é o raio ao quadrado multiplicado por PI. Uma dica: o .NET contém uma constante para PI, Math.PI que você pode usar para esse valor.
Math.PI, como todas as constantes declaradas no namespace System.Math
, é um valor double
. Por essa razão, deves usar os valores de double
em vez de decimal
para este desafio.
Deverá obter uma resposta entre 19 e 20.
Depois de experimentá-lo, abra o painel de detalhes para ver como você fez:
Tente outras fórmulas, se desejar.
Você concluiu o tutorial interativo "Números em C#". Você pode selecionar o link Branches and Loops para iniciar o próximo tutorial interativo ou pode visitar o site do .NET para baixar o SDK do .NET, criar um projeto em sua máquina e continuar codificando. A secção "Próximos passos" traz-o de volta a estes tutoriais.
Você pode saber mais sobre números em C# nos seguintes artigos: