fließkommazahl in zeitangabe umwandel?

Anfängerfragen zum Programmieren mit PureBasic.
Amon
Beiträge: 26
Registriert: 12.05.2005 21:29

Beitrag von Amon »

kann freedimension da nur zustimmen wenn ich mir die formel anschaue ist es eher so

0,25 --> 0 stunden 15 minuten
0,50 --> 0 stunden 30 minuten
0,75 --> 0 stunden 45 minuten
1,00 --> 1 stunden 00 minuten

ich glaub grad in dem fall wo es da um medizinische berechnung geht - die da auch ned ganz unkritisch ist - solltest du dir 100000% sicher sein :)
Benutzeravatar
Zerosurf
Beiträge: 131
Registriert: 11.10.2005 15:46

Beitrag von Zerosurf »

Also hier ist die Aufgabe mit Lösung:

Mittels Perfusor bekommt ein 70 kg schwerer Patient ein Medikament (500mg auf 50ml) mit 130µg/kgKG/min verabreicht.

a) Auf wieviel ml/h muss der Perfusor eingestellt werden?
b) Wie lange läuft bei dieser Einstellung eine Perfusorspritze (hat 50ml)?

Lösung:
a) 54,6 ml/h
b) 0,92 h =~ 55 min

0,92 h * 60 min = 55,2 min =~ 55min

somit entspricht

0,25 --> 0 stunden 15 minuten
0,50 --> 0 stunden 30 minuten
0,75 --> 0 stunden 45 minuten
1,00 --> 1 stunden 00 minuten

--> DA HABT IHR VOLLKOMMEN RECHT!

War mein Fehler!

Aber wie bau ich das jetzt in mein Programm ein?
Benutzeravatar
Lukaso
Beiträge: 720
Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:

Beitrag von Lukaso »

Ich denke 2,78 heißt, 2 Stunden und 0,78 * 60 = 46,8 Minuten


EDIT: Blinder Lukaso hat mal wieder nicht gesehen, dass es 3 Seiten sind :lol:

MFG Lukas
Nextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
Benutzeravatar
Zerosurf
Beiträge: 131
Registriert: 11.10.2005 15:46

Beitrag von Zerosurf »

Vielen Dank an alle besonders an jear!

Das Problem wurde dadurch gelöst:

Diese Zeile:

Code: Alles auswählen

result5$ = ReplaceString(StrF(rz,2), ".", ",", 2)
mit dieser ersetzen!

Code: Alles auswählen

result5$ = FormatDate("%hh:%ii:%ss", Round(rz * 3600, 1))
Nochmals vielen, vielen Dank an alle Helfer und Mitdenker!
Das hält das Hirn in Schwung!

mfg. Zerosurf
Benutzeravatar
Zerosurf
Beiträge: 131
Registriert: 11.10.2005 15:46

Beitrag von Zerosurf »

Jetzt hab ich nur mehr ein Problem:

Wenn ich

Code: Alles auswählen

result5$ = FormatDate("%dd Tage %hh:%ii:%ss", Round(rz * 3600, 1))
angebe, dann wird schon 01 Tag angezeigt obwohl erst z.B. 12 h angegeben sind?

Wie kann ich die Tagesanzeige auf 00 setzen und erst wenn 24 h vergangen sind auf 01 setzen lassen?

mfg. Zerosurf
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag von jear »

Kein Wunder. FormatDate() beruht auf der Unix-Zeit und zählt ab dem 1.1.1970. Das ist/war der erste Tag der Zählung. Daher klappt der Trick mit der Nutzung von FormatDate() nur, wenn man auf die Tage verzichtet und so tut, als suchte man eine Zeit am 1.1.1970.

Die folgende Prozedur macht es aber für Dich. Es ist der Code, den ich schon mal gepostet habe, aber abgewandelt für die Ermittlung von Tagen. Wohlgemerkt, immer ausgehend von einer Float mit Stunden.

Code: Alles auswählen

; mit Tagen und auf Hundertstelsekunden genau
; ausgehend von einer Float-Variablen mit Stunden
Procedure.s MakeTimeString(tdec.f) 
  Protected time.l, dd.w, hh.w, ii.w, ss.w, hs.w, out.s 
  time = Round(tdec * 360000, 1) 
  hs = time % 100 : time / 100 
  ss = time % 60  : time / 60 
  ii = time % 60  : time / 60
  hh = time % 24  : time / 24
  dd = Int(time) 
  out = RSet(Str(dd), 2, "0") + " Tge "  
  out + RSet(Str(hh), 2, "0") + " Std " 
  out + RSet(Str(ii), 2, "0") + " Min " 
  out + RSet(Str(ss), 2, "0") + "."  
  out + RSet(Str(hs), 2, "0") + " Sek"  
  ProcedureReturn out 
EndProcedure 

Debug MakeTimeString(32.51234)
P.S. Welche arme Sau soll den tagelang am Tropf hängen? :oops:
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Benutzeravatar
Zerosurf
Beiträge: 131
Registriert: 11.10.2005 15:46

Beitrag von Zerosurf »

@jear:

Vielen Dank!
Deine Funktion ist genau das was ich gesucht habe!

Ich hab sie jetzt eingebaut und alles läuft wunderbar.

Was anderes:

Leider fällt mir auf, nachdem ich meine Daten zur Berechnung eingeben habe und dann die Return-Taste drücke, daß nichts passiert.

Ich kann nur mit der Mouse auf den Berechnen-Button klicken, dann funktioniert es.
Oder wenn ich mit der Tab-Taste den Focus auf den Berechnen-Button bringe und dann die Space-Taste drücke funktioniert es auch.

Kann man das irgendwie ändern, so daß ich jederzeit die Return-Taste drücken kann und somit die Berechnung durchgeführt wird?

mfg. Zerosurf
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

für den 'berechnen'-button das default-flag setzen... ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Code: Alles auswählen

AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, #ReturnEvent)
Und dran denken, das ist ein MenuEvent, wenn Du mehrere Buttons hast wird es schon schwieriger. In normalen Fenstern wird nur auf Space reagiert, nur in Dialogfenstern reagiert ein Button auf Return, mußte also selber simulieren.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

wieso das?

ich kann doch in nem x-beliebigen fenster nen default auf nen button setzen, oder?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten