static_cast Verwirrung, die durch Unstimmigkeiten verursacht
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?
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.