Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Problem bei Typumwandlung
jofenchel
myCSharp.de - Member

Avatar #avatar-1735.gif


Dabei seit:
Beiträge: 117
Herkunft: 75389 Neuweiler

Themenstarter:

Problem bei Typumwandlung

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
DeveloperX
myCSharp.de - Member



Dabei seit:
Beiträge: 462
Herkunft: .at/ooe&stmk

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
jofenchel
myCSharp.de - Member

Avatar #avatar-1735.gif


Dabei seit:
Beiträge: 117
Herkunft: 75389 Neuweiler

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Pulpapex
myCSharp.de - Member



Dabei seit:
Beiträge: 939
Herkunft: Rostock

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
jofenchel
myCSharp.de - Member

Avatar #avatar-1735.gif


Dabei seit:
Beiträge: 117
Herkunft: 75389 Neuweiler

Themenstarter:

beantworten | zitieren | melden

Hallo pulpapex,

ich will halt keine nachkommastellen haben.
Sonder nur ganze Prozentzahlen.
private Nachricht | Beiträge des Benutzers
Pulpapex
myCSharp.de - Member



Dabei seit:
Beiträge: 939
Herkunft: Rostock

beantworten | zitieren | melden

Division bei Ganzzahl-Typen ist auch immer eine Ganzzahldivision.
private Nachricht | Beiträge des Benutzers
jofenchel
myCSharp.de - Member

Avatar #avatar-1735.gif


Dabei seit:
Beiträge: 117
Herkunft: 75389 Neuweiler

Themenstarter:

beantworten | zitieren | melden

O.K. Stimmt.

Dann meinst du ein cast kostet Rechenzeit.........
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.977

beantworten | zitieren | melden

Und bücher gibt es billig bei Terrashop.
Links diese Werbung von denen anklicken und mal über die Preise staunen.
private Nachricht | Beiträge des Benutzers
progger
myCSharp.de - Member

Avatar #avatar-2094.gif


Dabei seit:
Beiträge: 1.271
Herkunft: Nähe von München

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
jofenchel
myCSharp.de - Member

Avatar #avatar-1735.gif


Dabei seit:
Beiträge: 117
Herkunft: 75389 Neuweiler

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers