Frage

Warum, wenn ich kompilieren und führen Sie den folgenden Code in Visual Studio 2008:

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

ich einen falschen Wert von 26, während die Antwort 25 ist.

Allerdings, wenn ich statische Abgüsse auf den Doppeln verwenden, erhalte ich die richtige Antwort, die 25 ist.

Wie kann die falsche Ausgabe zu erklären?

War es hilfreich?

Lösung

Es ist absolut richtig.

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

Was man erwarten würde stattdessen? Der Compiler wertet zunächst die rechte Seite, und wandelt dann implizit auf die Int. So 26.0 wird 26

Wenn Sie werfen, bevor Sie hinzufügen möchten, dann werden Sie 10 und 15 hinzufügen, die in 25 Ergebnisse:)

Andere Tipps

Eigentlich kann man sich nicht auf Punktzahl zu Runde oder so schwebend, wenn eine automatische Konvertierung. Wenn 26,0 von 26,00005 dargestellt wird, wird es auf 26 gerundet werden, wenn sie von 25,999995 dargestellt wird, wird es auf 25 gerundet werden, wenn Sie sicher sein wollen, verwenden Sie die C-Funktion round Standard in math.h definiert. Zu sagen, So 26.0 wird 26 ist nicht ganz richtig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top