Hallo ich bin heute auf etwas seltsames gestoßen und vielleicht kann mir das jemand mal erklären.
double price = 18.9;
int test1 = (int)(price * 100); // gibt 1889 zurück
int test2 = Convert.ToInt32(price * 100); // gibt 1890 zurück
Wieso kommen hier unterschiedliche Werte raus?
lg LiMu
Hallo LiMuBai,
Wieso kommen hier unterschiedliche Werte raus?
Schau mal hier: https://stackoverflow.com/questions/1608801/what-is-the-difference-between-convert-toint32-and-int
Der erste Kommentar bei der Top Antwort.
Gruß
Eniplay
Why do java programmers wear glasses?
Because they can't see sharp
Hier ist noch eine Ergänzung aus dem oben genannten Thread, steht bei mir aber weit unten :
Just a brief extra: in different circumstances (e.g. if you're converting a double, &c to an Int32) you might also want to worry about rounding when choosing between these two. Convert.Int32 will use banker's rounding (MSDN); (int) will just truncate to an integer.
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
Weitere Ergänzung:
Das "Problem" mit dem Runden tritt in deinem Beispiel nur zu Tage, weil es beim Berechnen von 18,9 * 100 zu einer Ungenauigkeit kommt: 1889.9999999999998
Würde - wie angenommen - 1890 in den Klammern stehen, würde auch der korrekte Wert zurückgeliefert werden. =)
Die Antworten (EDIT: bis auf p!lle) stimmen zwar inhaltlich, erklären aber nicht das Phänomen, das wir hier haben.
Was hier steht:
Console.WriteLine((int)(100 * 18.9));
//Output: 1889
//übrigens:
Console.WriteLine(100 * 18.9); //hu?
Obacht beim Arbeiten mit Gleitkommazahlen 😃.
LaTino
EDIT: wer sich fragt, was da beim "hu?" los ist: https://referencesource.microsoft.com/#mscorlib/system/double.cs,de581d5a1a6b2a1a
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)