1

Console.WriteLine(10 / 4) imprime 2: o desafio de C# em que mais gente falha

O que imprime isto?

Console.WriteLine(10 / 4);

Se disseste 2,5, não és o primeiro. Imprime 2.

Com dois int, o C# faz divisão inteira. O resultado também é int e a parte decimal desaparece. Não arredonda, corta em direção a zero.

Console.WriteLine(10 / 4);    // 2
Console.WriteLine(-10 / 4);   // -2 (e não -3)
Console.WriteLine(10 % 4);    // 2 (o resto)

Quem decide é o tipo, não a conta. Basta um dos lados ter casas decimais:

Console.WriteLine(10 / 4.0);  // 2.5
Console.WriteLine(10 / 4d);   // 2.5

O sítio onde isto te apanha não é o 10 / 4 solto. É num cálculo normal, com variáveis, onde parece que está tudo certo:

int total = 10;
int pessoas = 4;
double media = total / pessoas;   // 2, não 2.5

O double à esquerda não ajuda. A divisão acontece primeiro, com dois int, e só depois o 2 é convertido para 2.0. O compilador não se queixa e o resultado sai errado em silêncio.

A correção é converter antes de dividir:

double media = (double)total / pessoas;   // 2.5

Se queres treinar este tipo de coisa, estou a construir a TOCA, uma app para aprender C# com lições de 5 minutos por dia. Está em https://learnwithtoca.com. Ainda é cedo e aceito feedback técnico, sobretudo se encontrares uma pergunta mal feita ou uma resposta discutível.

Carregando publicação patrocinada...