Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: sigma5345 am Mai 23, 2012, 08:08:02

Titel: Minuten in hh:mm umwandeln
Beitrag von: sigma5345 am Mai 23, 2012, 08:08:02
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]
Titel: Re: Minuten in hh:mm umwandeln
Beitrag von: DF6GL am Mai 23, 2012, 08:43:25
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
Titel: Re: Minuten in hh:mm umwandeln
Beitrag von: sigma5345 am Mai 23, 2012, 08:56:49
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
Titel: Re: Minuten in hh:mm umwandeln
Beitrag von: Hondo am Mai 23, 2012, 21:46:36
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
Titel: Re: Minuten in hh:mm umwandeln
Beitrag von: DF6GL am Mai 24, 2012, 08:32:30
Hallo,

wo gibt es denn im Code eine Rundung, bzw. überhaupt eine/n Double-Variable/Wert  ?

Titel: Re: Minuten in hh:mm umwandeln
Beitrag von: Hondo am Mai 24, 2012, 08:53:09
Hallo Franz,
Ändere mal Backslash in ein Slash...
und sowas passiert schnell mal.

Gruß Andreas
Titel: Re: Minuten in hh:mm umwandeln
Beitrag von: DF6GL am Mai 24, 2012, 10:59:47
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)


Titel: Re: Minuten in hh:mm umwandeln
Beitrag von: Hondo am Mai 24, 2012, 11:14:55
Mein ich ja....