Problem mit cast von double zu int
-
Halli Hallo,
ich hab da ein Problem mit dem folgenden Code. Wenn ich zum Schluss den double als int caste, bekomme ich da bei bestimmten Zahlen einen falschen Wert. Kann mir jemand sagen wieso das so ist und wie ich das Problem lösen kann?
int main(){ double d = 23.7; int i; cout<<"d = d - (int)d"<<" --> "<<d<<" - "<<(int)d<<" = "; d = d-(int)d; cout<<d<<"\n\n"; cout<<"d = d*10"<<" --> "<<d<<" *10"<<" = "; d = d *10; cout<<d<<"\n\n"; cout<<"(int)d = "<<(int)d<<endl; system("pause"); }
-
Was heißt "falschen Wert"?
Was du da benützt sind C-Casts, in C++ solltest du nur C++Casts verwenden:
double d; int i = static_cast< int >( d ); double c = static_cast< double >( i );
-
Schau dir doch mal im Debugger die Werte an... Dann siehst du warum das Ganze passiert.
-
Danke für die Tips!
_____Tobias Gerg schrieb:
Schau dir doch mal im Debugger die Werte an... Dann siehst du warum das Ganze passiert.
Kannst du mir sagen warum er bei der initialisierung 23.69999.... nimmt und nicht die 23,7?
-
CFlop schrieb:
Danke für die Tips!
_____Tobias Gerg schrieb:
Schau dir doch mal im Debugger die Werte an... Dann siehst du warum das Ganze passiert.
Kannst du mir sagen warum er bei der initialisierung 23.69999.... nimmt und nicht die 23,7?
http://de.wikipedia.org/wiki/Gleitkommazahl#Einschr.C3.A4nkungen_und_deren_mathematische_Grundlagen
-
Das sind Rundungsfehler- oder Darstellungsfehler, wenn aus dem Binärsystem ins Dezimalsystem umgerechnet wird. Manche Zahlen lassen sich binär schlechter darstellen als im Dezimalsystem, daher die Ungenauigkeiten. Das ist prinzpiell so, da kannst du nix dran machen (ausser vielleicht auf Nachkommastellen zu runden).
-
Vielen Dank
