Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Gostaria que o meu código imprimisse apenas duas casas após a vírgula, como faço ?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace P10_CalculaPoupanca
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Executando projeto 10 - Calcula Poupança!\n");

            double vInvestido = 1000;
            int contadorMes = 1;

            while (contadorMes <= 12)
            {
                vInvestido = (vInvestido + vInvestido * 0.0036);
                Console.WriteLine($"Após " + contadorMes + " mês você terá R$ " + vInvestido);

                //contadorMes = contadorMes + 1;
                //contadorMes += 1;
                contadorMes++;
            }

            Console.ReadLine();
        }
    }
}
4 respostas

Olá Gederson,

Você pode utilizar a biblioteca Math. Ao imprimir sua variável, você deve utilizar o método Math.Round(vInvestido, 2), que irá arredondar o valor para duas casas após a vírgula. Uma outra dica, é utilizar o nome completo da variável, ex. valorInvestido. Isso tornará seu código mais claro.

Olá Gederson!

A resposta do Jose está correta, mas apenas lhe dando mais umas dicas.

Uma boa prática ao trabalharmos com valores monetários é utilizarmos o tipo decimal ao invés de double, ele já é otimizado para esse tipo de operação, porém ainda assim não impedirá que tenha mais de duas casas decimais.

Para isso, será preciso realmente fazer o Math.Round(vInvestido, 2), ou ainda, caso precise arredondar para cima ou para baixo você pode fazer o seguinte:

   Math.Ceiling(vInvestido * 100) / 100; //Para cima
   Math.Floor(vInvestido * 100) / 100; //Para baixo

E por último, mais uma dica, você utilizou a interpolação de string com o char $, mas fez concatenação na string. Poderia fazer dessa forma também:

Console.WriteLine($"Após {contadorMes} mês você terá R$ {Math.Round(vInvestido, 2)}");

Qualquer dúvida, pode perguntar!

Pessoal obrigado pelas dicas contudo a saída continua com muitas casas decimais ... deixei algo passar ?

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Executando projeto 10 - Calcula Poupança!\n");

            double vInvestido = 1000;
            int contadorMes = 1;

            while (contadorMes <= 12)
            {
                vInvestido = (vInvestido + vInvestido * 0.0036);
                Console.WriteLine($"Após {contadorMes} mês você terá R$ {Math.Round(vInvestido, 2)}");

                //contadorMes = contadorMes + 1;
                //contadorMes += 1;
                contadorMes++;
            }

            Console.ReadLine();
        }
    }
solução!

Olá Gederson!

Testei o seu código aqui e apareceu apenas 1 ou 2 casas decimais, pois zeros à direita do separador decimal são desconsiderados, imprimiu assim para mim na tela:

/*
Executando projeto 10 - Calcula Poupança!

Após 1 mês você terá R$ 1003.6
Após 2 mês você terá R$ 1007.21
Após 3 mês você terá R$ 1010.84
Após 4 mês você terá R$ 1014.48
Após 5 mês você terá R$ 1018.13
Após 6 mês você terá R$ 1021.8
Após 7 mês você terá R$ 1025.47
Após 8 mês você terá R$ 1029.17
Após 9 mês você terá R$ 1032.87
Após 10 mês você terá R$ 1036.59
Após 11 mês você terá R$ 1040.32
Após 12 mês você terá R$ 1044.07
*/

Complementando a minha resposta, como você quer formatar a saída, o legal seria usar o string.Format, essa função faz a formatação de números, datas e etc. para texto.

Vou refazer o seu código aqui para você apenas copiar e testar:

Console.WriteLine("Executando projeto 10 - Calcula Poupança!\n");

double vInvestido = 1000;
int contadorMes = 1;

while (contadorMes <= 12)
{
    vInvestido = (vInvestido + vInvestido * 0.0036);
    Console.WriteLine($"Após {contadorMes} mês você terá R$ {string.Format("{0:0.00}", Math.Round(vInvestido, 2))}");

    //Também era possível fazer a exibição sem o Math.Round, dessa forma:
    //string.Format("{0:0.00}", vInvestido)

   //Ou ainda, passando o formato C ou c, de moeda, que já coloca o símbolo de moeda de acordo com a configuração do seu computador:
   //string.Format("{0:c}", vInvestido)
  //$1,003.60

    //contadorMes = contadorMes + 1;
    //contadorMes += 1;
    contadorMes++;
}

Console.ReadLine();

Deixo aqui um link da Microsoft com mais informações sobres os tipos de formatação: https://docs.microsoft.com/pt-br/dotnet/standard/base-types/formatting-types