Manipular números de ponto flutuante e integrais em C#Manipulate integral and floating point numbers in C#

Este tutorial ensina sobre os tipos numéricos em C# de maneira interativa.This tutorial teaches you about the numeric types in C# interactively. Você escreverá pequenas quantidades de código, depois compilará e executará esse código.You'll write small amounts of code, then you'll compile and run that code. O tutorial contém uma série de lições que exploram números e operações matemáticas em C#.The tutorial contains a series of lessons that explore numbers and math operations in C#. Estas lições ensinam os princípios básicos da linguagem C#.These lessons teach you the fundamentals of the C# language.

Este tutorial espera que você tenha um computador que possa usar para desenvolvimento.This tutorial expects you to have a machine you can use for development. O tutorial do .NET Olá, mundo em 10 minutos tem instruções para configurar seu ambiente de desenvolvimento local no Windows, Linux ou MacOS.The .NET tutorial Hello World in 10 minutes has instructions for setting up your local development environment on Windows, Linux, or macOS. Uma visão geral dos comandos que você usará está em Familiarize-se com as ferramentas de desenvolvimento, com links para obter mais detalhes.A quick overview of the commands you'll use is in the Become familiar with the development tools with links to more details.

Explorar a matemática de inteirosExplore integer math

Crie um diretório chamado numbers-quickstart.Create a directory named numbers-quickstart. Faça com que o diretório atual e execute o seguinte comando:Make that the current directory and run the following command:

dotnet new console -n NumbersInCSharp -o .

Abra Program.cs em seu editor favorito e substitua a linha Console.WriteLine("Hello World!"); pelo seguinte:Open Program.cs in your favorite editor, and replace the line Console.WriteLine("Hello World!"); with the following:

int a = 18;
int b = 6;
int c = a + b;
Console.WriteLine(c);

Execute este código digitando dotnet run na janela de comando.Run this code by typing dotnet run in your command window.

Você viu apenas uma das operações matemáticas fundamentais com números inteiros.You've just seen one of the fundamental math operations with integers. O tipo de int representa um número inteiro, zero, positivo ou inteiro negativo.The int type represents an integer, a zero, positive, or negative whole number. Você usa o símbolo + para adição.You use the + symbol for addition. Outras operações matemáticas comuns para inteiros incluem:Other common mathematical operations for integers include:

  • - para subtração- for subtraction
  • * para multiplicação* for multiplication
  • / para divisão/ for division

Comece explorando essas diferentes operações.Start by exploring those different operations. Adicione estas linhas após a linha que grava o valor de c:Add these lines after the line that writes the value of c:


// subtraction
c = a - b;
Console.WriteLine(c);

// multiplication
c = a * b;
Console.WriteLine(c);

// division
c = a / b;
Console.WriteLine(c);

Execute este código digitando dotnet run na janela de comando.Run this code by typing dotnet run in your command window.

Você também pode experimentar, executando várias operações matemáticas na mesma linha, se quiser.You can also experiment by performing multiple mathematics operations in the same line, if you'd like. Experimente c = a + b - 12 * 17;, por exemplo.Try c = a + b - 12 * 17; for example. É permitido misturar variáveis e números constantes.Mixing variables and constant numbers is allowed.

Dica

À medida que explora C# (ou qualquer linguagem de programação), você cometerá erros ao escrever o código.As you explore C# (or any programming language), you'll make mistakes when you write code. O compilador encontrará esses erros e os reportará a você.The compiler will find those errors and report them to you. Quando a saída contiver mensagens de erro, analise atentamente o código de exemplo e o código em sua janela para ver o que deve ser corrigido.When the output contains error messages, look closely at the example code and the code in your window to see what to fix. Esse exercício ajudará você a conhecer a estrutura do código C#.That exercise will help you learn the structure of C# code.

Você terminou a primeira etapa.You've finished the first step. Antes de iniciar a próxima seção, vamos passar o código atual para um método separado.Before you start the next section, let's move the current code into a separate method. Isso facilita o começo do trabalho com um exemplo novo.That makes it easier to start working with a new example. Renomeie seu método Main como WorkingWithIntegers e escreva um novo método Main que chama WorkingWithIntegers.Rename your Main method to WorkingWithIntegers and write a new Main method that calls WorkingWithIntegers. Quando você terminar, seu código deverá ter a seguinte aparência:When you finish, your code should look like this:

using System;

namespace NumbersInCSharp
{
    class Program
    {
        static void WorkingWithIntegers()
        {
            int a = 18;
            int b = 6;
            
            // addition
            int c = a + b;
            Console.WriteLine(c);
            
            // subtraction
            c = a - b;
            Console.WriteLine(c);
            
            // multiplication
            c = a * b;
            Console.WriteLine(c);
            
            // division
            c = a / b;
            Console.WriteLine(c);
        }

        static void Main(string[] args)
        {
            WorkingWithIntegers();
        }
    }
}

Explorar a ordem das operaçõesExplore order of operations

Comente a chamada para WorkingWithIntegers().Comment out the call to WorkingWithIntegers(). Isso tornará a saída menos congestionada enquanto você trabalha nesta seção:It will make the output less cluttered as you work in this section:

//WorkingWithIntegers();

O // inicia um comentário em C#.The // starts a comment in C#. Os comentários são qualquer texto que você queira manter em seu código-fonte, mas não queria executar como código.Comments are any text you want to keep in your source code but not execute as code. O compilador não gera qualquer código executável a partir dos comentários.The compiler does not generate any executable code from comments.

A linguagem C# define a precedência de operações matemáticas diferentes com regras consistentes às regras que você aprendeu em matemática.The C# language defines the precedence of different mathematics operations with rules consistent with the rules you learned in mathematics. Multiplicação e divisão têm precedência sobre adição e subtração.Multiplication and division take precedence over addition and subtraction. Explore isso adicionando o seguinte código ao seu método Main e executando dotnet run:Explore that by adding the following code to your Main method, and executing dotnet run:

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 é executada antes da adição.The output demonstrates that the multiplication is performed before the addition.

Você pode forçar uma ordem diferente de operações, adicionando parênteses para delimitar a operação, ou operações, que você quer realizar primeiro.You can force a different order of operation by adding parentheses around the operation or operations you want performed first. Adicione as seguintes linhas e execute novamente:Add the following lines and run again:

d = (a + b) * c;
Console.WriteLine(d);

Explore mais, combinando várias operações diferentes.Explore more by combining many different operations. Adicione algo parecido com as seguintes linhas na parte inferior de seu método Main.Add something like the following lines at the bottom of your Main method. Tente dotnet run novamente.Try dotnet run again.

d = (a + b) - 6 * c + (12 * 4) / 3 + 12;
Console.WriteLine(d);

Talvez você tenha observado um comportamento interessante com relação aos números inteiros.You may have noticed an interesting behavior for integers. A divisão de inteiros sempre produz um resultado inteiro, mesmo quando você espera que o resultado inclua uma parte decimal ou fracionária.Integer division always produces an integer result, even when you'd expect the result to include a decimal or fractional portion.

Se você ainda não viu esse comportamento, tente o seguinte código ao final de seu método Main:If you haven't seen this behavior, try the following code at the end of your Main method:

int e = 7;
int f = 4;
int g = 3;
int h = (e + f) / g;
Console.WriteLine(h);

Digite dotnet run novamente para ver os resultados.Type dotnet run again to see the results.

Antes de avançarmos, pegue todo código que você escreveu nesta seção e coloque-o em um novo método.Before moving on, let's take all the code you've written in this section and put it in a new method. Chame esse novo método de OrderPrecedence.Call that new method OrderPrecedence. O resultado final será algo semelhante a isto:You should end up with something like this:

using System;

namespace NumbersInCSharp
{
    class Program
    {
        static void WorkingWithIntegers()
        {
            int a = 18;
            int b = 6;
            
            // addition
            int c = a + b;
            Console.WriteLine(c);
            
            // subtraction
            c = a - b;
            Console.WriteLine(c);
            
            // multiplication
            c = a * b;
            Console.WriteLine(c);
            
            // division
            c = a / b;
            Console.WriteLine(c);
        }

        static void OrderPrecedence()
        {
            int a = 5;
            int b = 4;
            int c = 2;
            int d = a + b * c;
            Console.WriteLine(d);

            d = (a + b) * c;
            Console.WriteLine(d);

            d = (a + b) - 6 * c + (12 * 4) / 3 + 12;
            Console.WriteLine(d);

            int e = 7;
            int f = 4;
            int g = 3;
            int h = (e  + f) / g;
            Console.WriteLine(h);
        }

        static void Main(string[] args)
        {
            WorkingWithIntegers();

            OrderPrecedence();

        }
    }
}

Explorar a precisão de inteiros e limitesExplore integer precision and limits

Esse último exemplo mostrou que uma divisão de inteiros trunca o resultado.That last sample showed you that integer division truncates the result. Você pode obter o restante usando o operador module, o caractere %.You can get the remainder by using the modulo operator, the % character. Experimente o seguinte código em seu método Main:Try the following code in your Main method:

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 de inteiro C# difere do inteiros matemáticos de outra forma: o tipo int tem limites mínimo e máximo.The C# integer type differs from mathematical integers in one other way: the int type has minimum and maximum limits. Adicione este código ao seu método Main para ver esses limites:Add this code to your Main method to see those limits:

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 excede esses limites, você terá uma condição de estouro negativo ou estouro.If a calculation produces a value that exceeds those limits, you have an underflow or overflow condition. A resposta parece quebrar de um limite para o outro.The answer appears to wrap from one limit to the other. Adicione estas duas linhas ao seu método Main para ver um exemplo:Add these two lines to your Main method to see an example:

int what = max + 3;
Console.WriteLine($"An example of overflow: {what}");

Observe que a resposta é muito próxima do mínimo inteiro (negativo).Notice that the answer is very close to the minimum (negative) integer. É o mesmo que min + 2.It's the same as min + 2. A operação de adição estourou os valores permitidos para números inteiros.The addition operation overflowed the allowed values for integers. A resposta é um número negativo muito grande, pois um estouro "envolve" do maior valor de inteiro possível para o menor.The answer is a very large negative number because an overflow "wraps around" from the largest possible integer value to the smallest.

Há outros tipos numéricos com limites e precisão diferentes que você usaria quando o tipo int não atendesse às suas necessidades.There are other numeric types with different limits and precision that you would use when the int type doesn't meet your needs. Vamos explorá-los na sequência.Let's explore those next.

Novamente, vamos passar o código que você escreveu nesta seção para um método separado.Once again, let's move the code you wrote in this section into a separate method. Nomeie-o como TestLimits.Name it TestLimits.

Trabalhar com o tipo DoubleWork with the double type

O tipo numérico double representa um número de ponto flutuante de precisão dupla.The double numeric type represents a double-precision floating point number. Esses termos podem ser novidade para você.Those terms may be new to you. Um número de ponto flutuante é útil para representar números não integrais que podem ser muito grandes ou pequenos em magnitude.A floating point number is useful to represent non-integral numbers that may be very large or small in magnitude. Precisão dupla significa que esses números são armazenados usando uma precisão maior do que a precisão única.Double-precision means that these numbers are stored using greater precision than single-precision. Em computadores modernos, é mais comum usar precisão dupla que números de precisão única.On modern computers, it is more common to use double precision than single precision numbers. Vamos explorar.Let's explore. Adicione o seguinte código e veja o resultado:Add the following code and see the result:

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.Notice that the answer includes the decimal portion of the quotient. Experimente uma expressão ligeiramente mais complicada com duplos:Try a slightly more complicated expression with doubles:

double e = 19;
double f = 23;
double g = 8;
double h = (e + f) / g;
Console.WriteLine(h);

O intervalo de um valor duplo é muito maior do que valores inteiros.The range of a double value is much greater than integer values. Experimente o código a seguir abaixo do código que você escreveu até o momento:Try the following code below what you've written so far:

double max = double.MaxValue;
double min = double.MinValue;
Console.WriteLine($"The range of double is {min} to {max}");

Esses valores são impressos em notação científica.These values are printed out in scientific notation. O número à esquerda do E é o significando.The number to the left of the E is the significand. O número à direita é o expoente, como uma potência de 10.The number to the right is the exponent, as a power of 10.

Assim como os números decimais em matemática, os duplos em C# podem ter erros de arredondamento.Just like decimal numbers in math, doubles in C# can have rounding errors. Experimente esse código:Try this code:

double third = 1.0 / 3.0;
Console.WriteLine(third);

Você sabe que a repetição de 0.3 não é exatamente o mesmo que 1/3.You know that 0.3 repeating is not exactly the same as 1/3.

DesafioChallenge

Experimente outros cálculos com números grandes, números pequenos, multiplicação e divisão usando o tipo double.Try other calculations with large numbers, small numbers, multiplication and division using the double type. Experimente cálculos mais complicados.Try more complicated calculations.

Após algum tempo no desafio, pegue o código que você escreveu e coloque-o em um novo método.After you've spent some time with the challenge, take the code you've written and place it in a new method. Chame esse novo método de WorkWithDoubles.Name that new method WorkWithDoubles.

Trabalhar com tipos de ponto fixoWork with fixed point types

Você viu os tipos numéricos básicos em C#: inteiros e duplos.You've seen the basic numeric types in C#: integers and doubles. Ainda há outro tipo : o tipo decimal.There is one other type to learn: the decimal type. O tipo decimal tem um intervalo menor, mas precisão maior do que double.The decimal type has a smaller range but greater precision than double. O termo ponto fixo significa que a virgula decimal (ou ponto binário) não muda.The term fixed point means that the decimal point (or binary point) doesn't move. Vamos analisar:Let's take a look:

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.Notice that the range is smaller than the double type. Veja a precisão maior com o tipo decimal experimentando o código a seguir:You can see the greater precision with the decimal type by trying the following code:

double a = 1.0;
double b = 3.0;
Console.WriteLine(a / b);

decimal c = 1.0M;
decimal d = 3.0M;
Console.WriteLine(c / d);

O sufixo M nos números é o modo como você indica que uma constante deve usar o tipo decimal.The M suffix on the numbers is how you indicate that a constant should use the decimal type.

Observe que o cálculo usando o tipo decimal tem mais dígitos à direita da vírgula decimal.Notice that the math using the decimal type has more digits to the right of the decimal point.

DesafioChallenge

Agora que você viu os diferentes tipos numéricos, escreva um código que calcula a área de um círculo cujo raio é de 2,50 centímetros.Now that you've seen the different numeric types, write code that calculates the area of a circle whose radius is 2.50 centimeters. Lembre-se de que a área de um círculo é o quadrado do raio multiplicado por PI.Remember that the area of a circle is the radius squared multiplied by PI. Uma dica: o .NET contém uma constante para PI, Math.PI, que você pode usar para esse valor.One hint: .NET contains a constant for PI, Math.PI that you can use for that value.

Você deve obter uma resposta entre 19 e 20.You should get an answer between 19 and 20. Confira sua resposta analisando o código de exemplo finalizado no GitHubYou can check your answer by looking at the finished sample code on GitHub

Experimente outras fórmulas, se quiser.Try some other formulas if you'd like.

Você concluiu o início rápido "Números em C#".You've completed the "Numbers in C#" quickstart. Continue com o início rápido Branches e loops em seu próprio ambiente de desenvolvimento.You can continue with the Branches and loops quickstart in your own development environment.

Saiba mais sobre os números em C# nos tópicos a seguir:You can learn more about numbers in C# in the following topics: