Seite 1 von 5
fließkommazahl in zeitangabe umwandel?
Verfasst: 16.10.2005 01:03
von Zerosurf
Hallo Leute!
Bin grad dabei mein erstes Programm in PB zu schreiben.
Dabei geht es um Berechnungen mit Medikamentendosis und Milliliter und Minuten bzw. Stunden.
Jetzt hab ich folgendes Problem:
Aus einem bestimmten Ergebniss (z.B.: 2,78) würde ich gerne eine Zeitangabe haben -> Beispiel: 2,78 soll zu "3 Stunden 18 Minuten" umgewandelt werden.
Wie mache ich das am besten?
mfg. Zerosurf
Bzgl. Beistrich:
Der Beistrich wird bei mir vor einer Berechnung mittels ReplaceString zu einem Punkt umgewandelt ->
Code: Alles auswählen
gm.f = ValF(ReplaceString(GetGadgetText(6), ",", ".", 2))
und nach der Berechnung wird der Punkt wieder zu einem Beistrich ->
Hier zeige ich euch was ich meine:

Bei der Infusionsdauer sollte dann stehen: "2 Std. 19 Min."
Verfasst: 16.10.2005 01:22
von Laurin
Ich habe es nicht ganz verstanden.
Soll 2,78 zu 2,78 Std. alias 2 Std. 46 Min. 48 Sek. werden oder wie?
Verfasst: 16.10.2005 01:23
von zigapeda
und wie ist die formel?
oder frägst du uns weil du keine weißt, aber du eine brauchst?
Verfasst: 16.10.2005 01:42
von crossroads
So wie ich es verstanden habe, wird 2,78 zu 2 Std. 78 Min. bzw. 3 Std. 18 Min.
Man müßte also den Integerwert (das sind die Stunden; hier 2) in eine Variable hh.l wandeln, die Nachkommastellen (die Minuten; hier 78 ) in die Variable mm.l
Dann die Korrektur:
Code: Alles auswählen
While mm > 60
hh + 1
mm - 60
Wend
Debug result$ + " wird zu: " + Str(hh) + " Stunden " + Str(mm) + " Minuten"
Ist es das, was Du suchst?
Verfasst: 16.10.2005 01:49
von Deeem2031
Ich würde es so machen:
Code: Alles auswählen
f.f = 2.78
sec = f*3600
Debug Str(sec/3600)+":"+Str((sec/60)%60)+":"+Str(sec%60)
Verfasst: 16.10.2005 02:01
von crossroads
Deeem2031 hat geschrieben:Ich würde es so machen:
Code: Alles auswählen
f.f = 2.78
sec = f*3600
Debug Str(sec/3600)+":"+Str((sec/60)%60)+":"+Str(sec%60)
Stimmt aber nicht. 2,78 soll bedeuten: 2 Std. 78 Min. Daraus soll werden: 3 Std 18 Min.
Bei Dir kommt raus:
2:46:48
Bei meiner Version:
2,78 wird zu: 3 Stunden 18 Minuten
Verfasst: 16.10.2005 02:04
von Deeem2031
Klingt leicht unlogisch. Weil ich frag mich grad wie er solche Floatzahlen erstellt. Er müsste die ja erst zusammenflicken, damit er sie wieder auseinander nehmen kann. Reichlich komisch..
Verfasst: 16.10.2005 02:06
von Laurin
Die Zahl 2,78 an sich ist merkwürdig.
Die 2 soll 2 Std. bedeuten. Eigendlich müsste doch die 2 eher 200 Minuten als 120 Minuten bedeuten.
Das würde bedeuten, dass 2,78 eigendlich 278 Minuten alias 4 Std. 38 Min. sein müssten.
Oder es ist andersherum:
2,78 entspricht 2,78 Std alias 2 Std. 46 Min. 48 Sek.
@Deeem
Genau das finde ich auch. Irgendwie ist das komisch.
Verfasst: 16.10.2005 02:10
von crossroads
Deeem2031 hat geschrieben:Klingt leicht unlogisch. Weil ich frag mich grad wie er solche Floatzahlen erstellt. Er müsste die ja erst zusammenflicken, damit er sie wieder auseinander nehmen kann. Reichlich komisch..
Ich vermute mal, es existiert eine Formel zur Berechnung der Infusionsdauer, die er 1:1 umgesetzt hat und diese Formel spuckt einen Wert in dieser seltsamen Art aus.
Edit: letztendlich darf man wohl den Wert 2,78 nicht als Fließkommazahl ansehen, sondern als eine eigenwillige Art der Darstellung STD,MIN
Verfasst: 16.10.2005 02:14
von jear
Wie genau soll es ein?
Code: Alles auswählen
; auf die Sekunde genau
Procedure.s MakeTimeString_1(tdec.f)
ProcedureReturn FormatDate("%hh:%ii:%ss", tdec * 3600)
EndProcedure
; auf Hundertstel genau
Procedure.s MakeTimeString_2(tdec.f)
Protected time.l, hh.w, ii.w, ss.w, hs.w, out.s
time = tdec * 360000
hs = time % 100 : time / 100
ss = time % 60 : time / 60
ii = time % 60 : time / 60
hh = Int(time)
out = RSet(Str(hh), 2, "0")
out + ":" + RSet(Str(ii), 2, "0")
out + ":" + RSet(Str(ss), 2, "0")
out + "." + RSet(Str(hs), 2, "0")
ProcedureReturn out
EndProcedure
Debug MakeTimeString_1(2.51234567)
Debug MakeTimeString_2(2.51234567)