Laden...

Problem bei Typumwandlung

Erstellt von jofenchel vor 18 Jahren Letzter Beitrag vor 18 Jahren 3.190 Views
jofenchel Themenstarter:in
117 Beiträge seit 2005
vor 18 Jahren
Problem bei Typumwandlung

Hallo zusammen,
ich habe da ein kleines Problem mit einer expliziten Typumwandlung.
Folgendes klappt niicht:

progress =  (sbyte)( bytesRead / filelength ) * 100;

progress ist vom Typ sbyte;
bytesRead vom Typ long;
filelength vom Typ long;

Nun moecht ich bei der Prozentangabe nicht viel Speicherplatz verwschenden und beim errechen der Prozenanzahl nur ganze Zahlen anzeigen lassen.
Und da reicht ein sbyte doch vollkommen aus. Da die Prozentanzahl nur hoechstens 100 sein kann.

Was mache ich hier falsch?
Die nachfolgende Ausgabe zeigt mir immer 0 an.

Console.WriteLine( "Prozent: {0}.", progress );

JoFenchel

D
462 Beiträge seit 2005
vor 18 Jahren

Hallo jofenchel!

Das "* 100" gehört in die Klammer rein, ansonsten ergibt die Division 0 komma irgendwas, durch den Cast wird das dann 0 und die Multiplikation mit 100 ergibt dann logischerweise auch 0.

So sollte es also aussehen:

progress = (sbyte)(bytesRead * 100 / filelength);

mfg

jofenchel Themenstarter:in
117 Beiträge seit 2005
vor 18 Jahren

Hallo developerX,

sorry. daran habe ich nicht gedacht.
Ich habe noch keine Erfahrung mit dem casten.
ich habe zwar im msdn nachgeschaut und was gefunden aber das mit der 0 in Klammer habe ich nicht gewusst.

Muss mir mal ein C# Buche kaufen.
Wenn ich es mir mal leisten kann...

Danke.

JoFenchel

P
939 Beiträge seit 2003
vor 18 Jahren

die Umwandlung zu sbyte würde ich weglassen. Bringt nichts.

Die heutigen 32 Bit Rechner kommen halt besser mit 32 Bit zurecht. Alle Zwischenergebnisse der Rechnung sind 32 bit. Der cast bedeutet nur zusätzlichen Aufwand. Und Speicher sparst du dadurch auch nicht. Gerade mal 3 Byte. Der Cast nach sbyte benötigt wahrscheinlich mehr als 3 Byte IL-Code. Selbst ein bool belegt intern 32 bit.

Bei einem grossen Array könnte man vielleicht nochmal überlegen.

Gruss
Pulpapex.

jofenchel Themenstarter:in
117 Beiträge seit 2005
vor 18 Jahren

Hallo pulpapex,

ich will halt keine nachkommastellen haben.
Sonder nur ganze Prozentzahlen.

P
939 Beiträge seit 2003
vor 18 Jahren

Division bei Ganzzahl-Typen ist auch immer eine Ganzzahldivision.

jofenchel Themenstarter:in
117 Beiträge seit 2005
vor 18 Jahren

O.K. Stimmt.

Dann meinst du ein cast kostet Rechenzeit.........

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo jofenchel,

ich denke so wie man den Unterschied an Speicherverbrauch nicht im mindesten merkt, so merkt man auch den Unterschied an Rechenzeit nicht. Es geht hier um eine einzige Variable. Solche überlegungen spielen erst eine Rolle, wenn wir über Millionen oder Milliarden solcher Variablen sprechen oder über Anweisungen in Schleifen, die millionen- oder milliardenmal durchlaufen werden.

Man braucht und sollte nicht an den falschen Stellen optimieren.

Ein guter Merksatz dazu ist: Make it run, make it right, make it fast, make it small

Also Optimierung erst zum Schluß und nur an den Stellen, wo es wirklich was bringt. An den Hotspots.

herbivore

F
10.010 Beiträge seit 2004
vor 18 Jahren

Und bücher gibt es billig bei Terrashop.
Links diese Werbung von denen anklicken und mal über die Preise staunen.

1.271 Beiträge seit 2005
vor 18 Jahren

Ich kann dir das eBook C# von Galileo Computing empfehlen. Das ist auch völlig kostenlos!

A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee

Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.

jofenchel Themenstarter:in
117 Beiträge seit 2005
vor 18 Jahren

Hallo an alle,

danke fuer die Buechertips.
Das Online von Gallileo ist nicht schlecht.
Danke herbivore fuer die Tips.

Viele werden zwar lachen, aber ich kann mir finanziell derzeit nicht mal ein Buch kaufen.
Lerne C# aus dem Internet und Foren und Fragen halt.....

Bis dann.

JoFenchel