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

Cálculo com double apresenta valor incorreto.

Olá. O seguinte código deveria apresentar o valor:RENDIMENTO :5 e MONTANTE 1005.0

using System;

class Programa
{
    static void Main(string[] args)
    {
        double capitalInicial = 1000;
        double taxa = 0.005;
        double taxaTotal = 1;
        double rendimento = 0;
        double montante = 0;
        int meses = 1;

        while (meses >= 1)
        {
            taxaTotal *= (1 + taxa);
            meses--;
        }

        montante = capitalInicial * taxaTotal;
        rendimento = montante - capitalInicial  ;

        Console.WriteLine("CAPITAL INICIAL: " + capitalInicial);
        Console.WriteLine("TAXA: " + taxa);
        Console.WriteLine("Taxa total = " + taxaTotal);
        Console.WriteLine("RENDIMENTO: " + rendimento);
        Console.WriteLine("MONTANTE: " + montante);


    }
}

Mas está apresentando: Saida do programa:(https://cdn1.gnarususercontent.com.br/1/1415132/9eec9eb0-970c-4c55-a460-00ae873807be.png)

O que estou fazendo de errado?

2 respostas
solução!

Adriano,

experimente desta forma:

using System;

class Programa
{
    static void Main(string[] args)
    {
        decimal capitalInicial = 1000m;
        double taxa = 0.005;
        decimal taxaTotal = 1;
        decimal rendimento = 0;
        decimal montante = 0;
        int meses = 1;

        while (meses >= 1)
        {
            taxaTotal *= (decimal)(1 + taxa);
            meses--;
        }

        montante = capitalInicial * taxaTotal;
        rendimento = montante - capitalInicial;

        Console.WriteLine("CAPITAL INICIAL: " + capitalInicial);
        Console.WriteLine("TAXA: " + taxa);
        Console.WriteLine("Taxa total = " + taxaTotal);
        Console.WriteLine("RENDIMENTO: " + rendimento);
        Console.WriteLine("MONTANTE: " + montante);
        Console.ReadKey();
    }
}

Qual é o segredo? Mágica Voodoo Caribenha? Não...

  • O tipo float é um tipo de ponto flutuante de simples precisão.
  • O tipo double cobre uma faixa de valores maior do que float e decimal.
  • O tipo decimal tem precisão maior do que float e double.
  • O tipo decimal também é um tipo de ponto flutuante.

Por favor, assista as duas aulas abaixo:

==========================================================

01 - Ponto Flutuante

https://cursos.alura.com.br/course/certificacao-csharp-criar-tipos/task/42718

==========================================================

02 - Decimal

https://cursos.alura.com.br/course/certificacao-csharp-criar-tipos/task/42719

==========================================================

Agora para fechar com chave de ouro, por favor leia os textos abaixo:

==========================================================

C# - Usando o ponto flutuante nos cálculos

José Carlos Macoratti

Conclusão

Para qualquer cálculo que envolva dinheiro ou finanças, o tipo Decimal deve ser sempre utilizado.

Só este tipo tem a precisão adequada para evitar os erros críticos de arredondamento.

https://www.macoratti.net/18/04/c_pontflut1.htm

==========================================================

.Net - Float(Single), Double e Decimal. Afinal qual devo usar ?

José Carlos Macoratti

  • Qual o tamanho dos números que sua aplicação vai tratar ? Eles estão no extremo, tanto positivo ou negativo ?
  • Qual a precisão que você precisa ter em seus cálculos ? É de sete dígitos ? Dezesseis dígitos ? muito mais que isso ?
  • Você consegue dimensionar o quanto de memória será gasto na utilização do ponto flutuante ?
  • Os números são proveniente de um banco de dados que já especifica o tamanho usado ?

Decidir qual o tipo de ponto flutuante usar vai depender da aplicação, mas aqui estão alguns considerações que podem ajudar a decidir:

https://www.macoratti.net/12/12/c_num1.htm

==========================================================

Qual a forma correta de usar os tipos float, double e decimal?

0.2 + 0.8 é diferente de 1.0?!?!?!?!

https://pt.stackoverflow.com/questions/219211/qual-a-forma-correta-de-usar-os-tipos-float-double-e-decimal

==========================================================

Decimal Estrutura - Referência

https://learn.microsoft.com/pt-br/dotnet/api/system.decimal?view=net-7.0

==========================================================

[]'s,

Fabio I.

Um time de futebol da Microsoft tem 11,9999999998 jogadores... KKKKKK! Piada velha, mas ainda válida!

Muito Obrigado!!