Laden...

Convert Problem.

Letzter Beitrag vor 17 Jahren 8 Posts 2.598 Views
Convert Problem.

Hallo,

bisher dachte ich, dass

(Int32)einInt

und

Convert.ToInt32(einInt)

das gleiche Ergebnis liefern. Allerdings musste ich gerade feststellen, dass dem nicht so. Zum Beispiel wird bei x,5 bei ersterer Variante immer abgerundet und bei der zweiten mal auf und mal ab. Woran liegt das?

Gruß
Patrick

Wer nicht fragt, bleibt dumm.

Hallo pkoeppe,

hm, das hat eigentlich gar nichts miteinander zu tun. Das erste ist eine Konvertierung durch den "Compiler", das zweite eine Methode aus der Klassenbibliothek. Diese sind unterschiedlich implementiert. Mehr kann man eigentlich nicht sagen.

herbivore

Original von pkoeppe
Hallo,

bisher dachte ich, dass

(Int32)einInt  

und

Convert.ToInt32(einInt)  

das gleiche Ergebnis liefern. Allerdings musste ich gerade feststellen, dass dem nicht so. Zum Beispiel wird bei x,5 bei ersterer Variante immer abgerundet und bei der zweiten mal auf und mal ab. Woran liegt das?

Das du "einInt" als Plathalter fuer z.B. 0,5 nimmst, find ich etwas seltsam.
Zum Thema: Herbivore hat ja schon gesagt, dass beides unterschiedlich implementiert ist. Ich wollte nur nochmal auf das "mal auf- und mal abrunden" kommen:

MSDN, Convert.ToInt32(double)
Return Value
value rounded to the nearest 32-bit signed integer. If value is halfway between two whole numbers, the even number is returned; that is, 4.5 is converted to 4, and 5.5 is converted to 6.

Pound for pound, plutonium is about as toxic as caffeine when eaten.

Erst einmal schönen Dank.

Welcher Variante ist nun der Vorzug zu geben?

Hatte irgendwo im Netz mal eine Gegenüberstellung gefunden, bei der der Compiler-Cast um 80% schneller war als der Cast der Convert-Klasse. Aber mir war auch irgendwie so als ob das Casten mit der Convert-Klasse sicherer wäre. Bin irgendwie gerade verwirrt.

Gruß
Patrick

Wer nicht fragt, bleibt dumm.

Hallo pkoeppe,

Welcher Variante ist nun der Vorzug zu geben?

unter .net 2.0 int.TryParse

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

Hallo frisch,

er will ja wohl einen double in einen int wandeln. Zumindest keinen String.

Hallo pkoeppe,

lustige Idee zwei semantisch unterschiedliche Konstrukte nach der Performance zu vergleichen, nach dem Motto, wenn es ein bisschen schneller geht, kann das Ergebnis ruhig falsch sein. 🙂

herbivore

Original von pkoeppe
Welcher Variante ist nun der Vorzug zu geben?

s. Herbivore: Welche "Rundung" brauchst du?
Was erscheint dir besser (zu lesen/schreiben)?

Original von pkoeppe
Hatte irgendwo im Netz mal eine Gegenüberstellung gefunden, bei der der Compiler-Cast um 80% schneller war als der Cast der Convert-Klasse.

Hast du eine fertige Applikation, bei der Profiling den Engpass bei double zu int casts aufzeigt? Nein? Dann ist der Grundgedanke schon ein Fall von "premature optimization". Wieder vergessen..

Pound for pound, plutonium is about as toxic as caffeine when eaten.

Schönen Dank für die Antworten. Verwende demnächst häufiger den Compiler-Cast, dass ist eher das was ich beabsichtige.

Gruß
Patrick

Wer nicht fragt, bleibt dumm.