Usuário com melhor resposta
Erro em multiplicação de valores c#

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?
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=-2147217396William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Marcado como Resposta Gustavo_Freitas segunda-feira, 10 de agosto de 2015 14:02
-
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
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=-2147217396William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Marcado como Resposta Gustavo_Freitas segunda-feira, 10 de agosto de 2015 14:02
-
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
-
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.