[Frage] Problem mit Rechnung ...

12/13/2013 10:56 Cotigo#1
Hiho,

da ich noch relativ neu bin im C# Bereich, weis ich bei diesem Problem nicht wirklich weiter.
Ich wollte gern die EXP/h berechnen jedoch kriege ich wenn ich den Wert als decimal deklariere immer eine Fehlermeldung das der Wert zu groß dafür sei. Nutze ich jedoch float oder double kriege ich "+unendl." raus und beim int -21....,00 raus.
Code:
            Adresses addresses = new Adresses();
            int currentXP = addresses.charEXP();
            int currentTime = DateTime.Now.TimeOfDay.Minutes;
            int hour = 60;
            double getCurrentTime = currentTime / hour;
            double getNewXP = currentXP / getCurrentTime;
            float XPpHour = (float)Math.Round(getNewXP);
            return XPpHour;
Ich hoffe mir kann jemand bei diesem Problem helfen.

P.S.: Code ist nur testweise deshalb auch nur DateTime.Now.TimeOfDay.Minutes zum ausprobieren.

MfG
Cotigo
12/13/2013 12:21 snow#2
Code:
int currentTime = DateTime.Now.TimeOfDay.Minutes;
int hour = 60;
double getCurrentTime = currentTime / hour;
Sicher, dass da nicht 0 als Ergebnis rauskommt? Dann funktioniert die Division hier:
Code:
double getNewXP = currentXP / getCurrentTime;
nämlich nicht mehr, durch 0 teilen funktioniert normalerweise nicht.

Code:
(currentTime * 1.0) / hour
sollte funktionieren, jetzt musst du nur noch verhindern, dass die Stunde gerade frisch angefangen hat und du somit wieder durch 0 teilst.

Das ganze gehört übrigens in die [Only registered and activated users can see links. Click Here To Register...], ich habe mal einen Moverequest abgeschickt. :)
12/13/2013 13:26 MrSm!th#3
Quote:
Originally Posted by snow911 View Post
Code:
int currentTime = DateTime.Now.TimeOfDay.Minutes;
int hour = 60;
double getCurrentTime = currentTime / hour;
Sicher, dass da nicht 0 als Ergebnis rauskommt? Dann funktioniert die Division hier:
Code:
double getNewXP = currentXP / getCurrentTime;
nämlich nicht mehr, durch 0 teilen funktioniert normalerweise nicht.

Code:
(currentTime * 1.0) / hour
sollte funktionieren, jetzt musst du nur noch verhindern, dass die Stunde gerade frisch angefangen hat und du somit wieder durch 0 teilst.

Das ganze gehört übrigens in die [Only registered and activated users can see links. Click Here To Register...], ich habe mal einen Moverequest abgeschickt. :)
0 * 1.0 = 0
12/13/2013 13:29 snow#4
Quote:
Originally Posted by MrSm!th View Post
0 * 1.0 = 0
Quote:
jetzt musst du nur noch verhindern, dass die Stunde gerade frisch angefangen hat und du somit wieder durch 0 teilst.
war evtl. unklar ausgedrückt aber daran habe ich schon gedacht. :p
12/13/2013 16:06 Cotigo#5
Quote:
Originally Posted by snow911 View Post
Sicher, dass da nicht 0 als Ergebnis rauskommt? Dann funktioniert die Division hier:
Code:
double getNewXP = currentXP / getCurrentTime;
nämlich nicht mehr, durch 0 teilen funktioniert normalerweise nicht.

Code:
(currentTime * 1.0) / hour
sollte funktionieren, jetzt musst du nur noch verhindern, dass die Stunde gerade frisch angefangen hat und du somit wieder durch 0 teilst.

Das ganze gehört übrigens in die [Only registered and activated users can see links. Click Here To Register...], ich habe mal einen Moverequest abgeschickt. :)
Ahh, daran scheints gelegen zu haben, denn nun kommen doch schon vernünftige Werte bei raus^^.
Das, dass hier nicht hingehörte wusste ich nicht bzw. war ich mir selber nicht ganz sicher ._.' Danke fürs moven :)

MfG
Cotigo
12/16/2013 17:19 MrSm!th#6
Noch als Hinweis, falls es dir nicht selbst klar ist:
Das Ergebnis einer Division von zwei Integer-Variablen ist selbst wieder ein Integer. Das heißt, dass 0 herauskommt, wenn das Ergebnis kleiner als 1 wäre.
Damit das Ergebnis eine Gleitkommazahl (z.B. float) wird, muss mindestens einer der Operanden von diesem Typ sein. Deshalb funktioniert es, 1.0 damit zu multiplizieren. Alternativ könntest du auch einen der Operanden casten.

Übrigens funktioniert dein Ansatz nicht. Um die EXP-Rate zu errechnen, brauchst du logischerweise eine Start- und eine Endzeit und teilst durch die Differenz. Dann ergibt sich auch das Problem mit dem durch 0 Teilen nicht, wenn du die Messintervalle fest definierst (z.B. durch einen Timer).
12/16/2013 19:25 Cotigo#7
Quote:
Originally Posted by MrSm!th View Post
Übrigens funktioniert dein Ansatz nicht. Um die EXP-Rate zu errechnen, brauchst du logischerweise eine Start- und eine Endzeit und teilst durch die Differenz. Dann ergibt sich auch das Problem mit dem durch 0 Teilen nicht, wenn du die Messintervalle fest definierst (z.B. durch einen Timer).
Einen Start und Endtimer gibt es ja, das was in meinem 1. Post war, war nur ein Pseudo-Code um überhaupt etwas zu errechnen. Hätte da natürlich auch bei int currentTime = DateTime.Now.TimeOfDay.Minutes; irgendeine Zahl eingeben können die in dem Bereich (0 - 60) existiert.