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
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
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
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.
Hallo pulpapex,
ich will halt keine nachkommastellen haben.
Sonder nur ganze Prozentzahlen.
Division bei Ganzzahl-Typen ist auch immer eine Ganzzahldivision.
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
Und bücher gibt es billig bei Terrashop.
Links diese Werbung von denen anklicken und mal über die Preise staunen.
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.
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