Pergunta

Por que sempre que eu compilar e executar o seguinte código no Visual Studio 2008:

double value1 = 10.5;
double value2 = 15.5;
int whole_number = value1 + value2;
Console::WriteLine(whole_number);

Eu recebo um valor incorreto de 26, enquanto a resposta é 25.

No entanto, quando eu uso moldes estáticos nas duplas, recebo a resposta certa, que é de 25.

Como pode a saída errada ser explicado?

Foi útil?

Solução

É absolutamente certo.

double value1 = 10.5;
double value2 = 15.5;
int whole_number = value1 + value2; // int whole_number = 26.0;
Console::WriteLine(whole_number);

O que você espera em vez disso? O compilador primeiro avalia o lado direito, e, em seguida, implicitamente converte ao int. Assim, torna-se 26.0 26

Quando você lança antes de adicionar, então você está indo para adicionar 10 e 15, o que resulta em 25:)

Outras dicas

Na verdade, você não pode confiar em números de ponto flutuante para rodada de qualquer forma ao fazer uma conversão automática. Se 26,0 é representado por 26,00005, ele será arredondado para 26, se ele é representado por 25,999995, ele será arredondado para 25. Se você quer ter certeza, use o round função C padrão, definido no math.h. Dizendo Assim, 26,0 torna-se 26 não é totalmente correcta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top