Domanda

Perché ogni volta che compilo ed eseguo il seguente codice in Visual Studio 2008:

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

Ottengo un valore errato di 26 mentre la risposta è 25.

Comunque quando uso i cast statici sui doppi, ottengo la risposta giusta che è 25.

Come si può spiegare l'output sbagliato?

È stato utile?

Soluzione

È assolutamente giusto.

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

Cosa ti aspetteresti invece? Il compilatore valuta prima il lato destro, quindi si converte implicitamente nell'int. Pertanto, 26.0 diventa 26

Quando esegui il cast prima di aggiungere, aggiungerai 10 e 15 , che risulta in 25 :)

Altri suggerimenti

In realtà, non è possibile fare affidamento sui numeri in virgola mobile per arrotondare in entrambi i modi quando si esegue una conversione automatica. Se 26.0 è rappresentato da 26.00005, sarà arrotondato a 26, se è rappresentato da 25.999995, sarà arrotondato a 25. Se si desidera essere sicuri, utilizzare la funzione C standard round , definita in math.h . Dire Pertanto, 26.0 diventa 26 non è del tutto corretto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top