1
resposta

Diferença no valor da depuração com float e com double

Por que na depuração com variáveis do tipo double o valor apresentado ao posicionar o mouse sobre o operador "+" é o valor de armazenamento interno, e ao fazer o mesmo com o float, o valor apresentado é o mesmo exibido no console?

Ex:

double num1 = 10.10;
double num2 = 10.20;

Console.WriteLine(num1 + num2 == 20.30);

O valor da soma apresentado na depuração é 20.299999999999997.

Já quando realizada a depuração com as variáveis do tipo float, a soma apresentada é 20.3.

Qual o motivo dessa diferença, visto que se comparo ambas com 20.3 o retorno é false? E por que motivo o tipo double não é capaz de armazenar o valor arredondado?

Agradeço desde já.

1 resposta

Olá Felipe, tudo certo?

Isso acontece porque os valores float e double são representados internamente em binário. Essas estruturas não conseguem guardar muitas casas decimais e no fim das contas o compilador arredonda os valores. O float aparece como 20.3 porque o compilador já arredonda o valor na hora de imprimir.

Com a estrutura decimal os números já são armazenados internamente como números decimais e por ter uma precisão maior na quantidade de dígitos, o compilador vai apresentar o número correto.

Bons estudos!