Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Minuten in hh:mm umwandeln

Begonnen von sigma5345, Mai 23, 2012, 08:08:02

⏪ vorheriges - nächstes ⏩

sigma5345

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]

DF6GL

#1
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
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

sigma5345

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

Hondo

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

DF6GL

Hallo,

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

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Hondo

Hallo Franz,
Ändere mal Backslash in ein Slash...
und sowas passiert schnell mal.

Gruß Andreas

DF6GL

#6
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)


Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Hondo