Laden...

(int) gibt anderen Wert zurück als Convert.toInt32

Erstellt von LiMuBai vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.827 Views
L
LiMuBai Themenstarter:in
13 Beiträge seit 2013
vor 6 Jahren
(int) gibt anderen Wert zurück als Convert.toInt32

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

35 Beiträge seit 2015
vor 6 Jahren

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

3.825 Beiträge seit 2006
vor 6 Jahren

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

1.040 Beiträge seit 2007
vor 6 Jahren

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. =)

3.003 Beiträge seit 2006
vor 6 Jahren

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)