Hallo,
ich habe in einer Abfrage eine Spalte in der aus mehreren Spalten eine Summe von Minuten gebildet wird. Das klappt erstmal. Nun versuche ich diesen Wert für die bessere Anzeige in das Format hh:mm zu bringen.
Dafür habe ich folgende Funktion bei google gefunden:
Public Function fctConvertTime(varMin As Double)
Dim Stunden As Double
Dim minuten As Double
Stunden = varMin \ 3600
minuten = (varMin - Stunden * 60) \ 60
fctConvertTime = Format(Stunden, "00") & Format(minuten, ":00")
End Function
Problem dabei ist, dass er bei schon bei der Berechnung der Stunden rundet. Wenn ich beispielweise 5000 Minuten als Parameter übergebe wird in der Variablen "Stunden" nur eine 1 gespeichert und nicht 1,388888.. Beim Feld Minuten wird ebenfalls ein gerundetet Wert übergeben...
Habe ich einen Denkfehler dabei, oder was muß ich daran ändern?
Danke schon mal für eure Tipps.
Gruß
sigma
PS: anbei ein Screenshot aus dem Debugger
[Anhang gelöscht durch Administrator]
Hallo,
man sollte nicht alles glauben, was man so im Internet findet. Denkfehler hat der Autor des Codes gemacht...
Public Function fctConvertTime(lngMin As Long)
Dim lngStunden As Long
Dim lngMinuten As Long
lngStunden = lngMin \ 60
lngMinuten = lngMin - lngStunden * 60
fctConvertTime = Format(lngStunden, "00") & Format(lngMinuten, "\:00")
End Function
ja ... wieder bestätigt sich, dass man nicht alles glauben sollte was man findet :)!
Durch deine Anpassungen klappt es nun wunderbar.
Vielen Dank!!!
Gruß
sigma
Hallo,
ich würde generell die Formeln mit int() zwingen dass abgerundet wird.
Beispiel:
Dim lngMinuten As Long
lngMinuten = 6.666666667
msgbox lngMinuten
Was kommt raus? richtig, 7
Gruß Andreas
Hallo,
wo gibt es denn im Code eine Rundung, bzw. überhaupt eine/n Double-Variable/Wert ?
Hallo Franz,
Ändere mal Backslash in ein Slash...
und sowas passiert schnell mal.
Gruß Andreas
Hallo Andreas,
nein, der darf nicht geändert werden.... Der Backslash ist der Ganzzahl-Division-Operator und ergibt eine Integer-Zahl "ohne Rest"....
Klar könnte man irgendwelchen "verschriebenen" Operatoren durch permanente Plausibilitätsprüfungen (die wiederum selber die latente Gefahr von "falschen" Berechnungen enthalten) auf die Schliche kommen, aber das dürfte den Einsatzrahmen sicherlich sprengen... ;)
Andererseits wäre vielleicht das Runden (durch die interne Typkonvertierung) einer rationalen Minutenzahl bei der Übergabe als Parameter an die Funktion sogar wünschenwert:
Msgbox fctConvertTime (3600.75)
Mein ich ja....