none
Erro em multiplicação de valores c# RRS feed

  • Pergunta

  • Estou com um erro na realização de contas em geral no c#. Um exemplo que tenho aqui é o seguinte

    double a = 5.04;
    double b = 3.00;
    double c = a * b;

    o resultado esperado na variável c seria 15.12, porem o que aparece é  15.120000000000001

    Alguém sabem porque esta me retornando esse 1 lá no final?

    segunda-feira, 10 de agosto de 2015 13:41

Respostas

Todas as Respostas

  • É assim mesmo. Isso ocorre porque a representaçao binaria é truncada. Para entender o que o ocorre voce em que ler este artigo:

    http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

    Se voce precisa somente de dois decimais faça assim:

    double a = 5.04;
    double b = 3.00;
    double c = Math.Round(a * b,2);

    https://msdn.microsoft.com/en-us/library/75ks3aby%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    • Marcado como Resposta Gustavo_Freitas segunda-feira, 10 de agosto de 2015 14:02
    segunda-feira, 10 de agosto de 2015 13:53
    Moderador
  • Bom dia Gustavo,

    O número 1 no final da sua conta não é errado, ele faz parte do cálculo.

    O que você pode fazer para ajustar esse caso, é limitar a quantidade de casas decimais na variável C, conforme exemplo abaixo.

    double a = 5.04;
    double b = 3.00;
    double c = a * b;
    
    // Informa qual variável será ajustada e quantas casas decimais você deseja.
    c = Math.Round(c, 2);

    Abs.

    Bruno Destro


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    • Marcado como Resposta Gustavo_Freitas segunda-feira, 10 de agosto de 2015 14:02
    segunda-feira, 10 de agosto de 2015 13:53
  • Nossa que coisa louca. Pensei que o c# estava ficando louco hehe.

    A beleza então, o round eu já estava usando mesmo pra conseguir o resultado que queria, só achei estranho o resultado que me foi retornado com o 1 no final.

    Muito obrigado pela ajuda de vocês.

    segunda-feira, 10 de agosto de 2015 14:04