AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stunden/Minuten in Dezimalwerten

Ein Thema von newuser01 · begonnen am 13. Apr 2007 · letzter Beitrag vom 13. Apr 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#11

Re: Stunden/Minuten in Dezimalwerten

  Alt 13. Apr 2007, 12:40
Wenn du die werte voeher in Integer (z.B. mit minuten) umwandelst und dann damit weiterrechnest, dann kannst du zumindestens weitere Rundungsfehler (basierend auf die Fließkommazahlen) vermeiden.

FloatingPointUnit (Fließkommaeinheit) ... halt das Ding in deinem Rechner, welches mit den reellen Zahlen rechnet.

Delphi-Quellcode:
i := Round((Ende - Start) * (24*60));
//i = minuten
Delphi-Referenz durchsuchenRound rundet ja auf/ab, würde also kleine Rundungsfehler gut wegmachen und der Integer kennt derartige Rundungsfehler nicht.


hier mal ein "extremes" Beispiel für die Ungenauigkeiten bei reellen Typen:
(benötigt nur 2 TLabels und einen TButton)
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
  r: single;
begin
  r := 0;
  i := 0;
  repeat
    r := r + 0.0001;
    i := i + 1;
    Label1.Caption := FloatToStr(r);
    Label2.Caption := FloatToStr(i / 10000);
    Application.ProcessMessages;
  until application.Terminated;
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
newuser01

Registriert seit: 31. Aug 2006
248 Beiträge
 
Delphi 7 Professional
 
#12

Re: Stunden/Minuten in Dezimalwerten

  Alt 13. Apr 2007, 12:56
Ok also ist es besser erst alles in Minuten umzurechnen also zb. so


Delphi-Quellcode:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
Start, Ende, Gesamt: TDateTime;
iTmp:Integer
begin

Start := StrToDateTime(eStart.Text); //zb. von 08:00
Ende := StrToDateTime(eEnde.Text); // bis 09:00
Gesamt:= (Ende - Start);

iTmp := Round((Gesamt) * (24*60));

eGesamt.Text := IntToStr(iTmp);

end;
Anschießend könnten alle Minuten in der Tabelle addiert werden und dann mit "Minuten/60" zu Stunden und Minuten berechnet werden seh ich das so richtig ?
Gruß: Holger

[Hobby-Programmierer]
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#13

Re: Stunden/Minuten in Dezimalwerten

  Alt 13. Apr 2007, 13:10
Du könntest auch diese Funktion aus den DateUtils verwenden:

function MinutesBetween(const ANow, AThen: TDateTime): Int64;

eGesamt.Text:=IntToStr(MinutesBetween(StrToDateTime(eStart.Text),StrToDateTime(eEnde.Text))); Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#14

Re: Stunden/Minuten in Dezimalwerten

  Alt 13. Apr 2007, 13:22
jupp, wäre möglich


minuten := MinutesBetween(StrToDateTime(eStart.Text), StrToDateTime(eEnde.Text)));
macht och nur
minuten := Abs(Round((StrToDateTime(eEnde.Text) - StrToDateTime(eStart.Text)) * (24*60)));
und da eEnde vermutlich immer nach eStart liegt, kann das Abs entfallen.

ein div statt / erspart dir dann wiederum den weg über reelle typen.
Delphi-Quellcode:
stunden := gesamtminuten div 60;
minuten := gesamtminuten mod 60;


PS: falls du maximal 4 nachkommastellen benötigst ...
Currency ist in Wirklichkeit ein Int64 (64 Bit-Integer), nur das der automatisch (wenn es nötig ist) entsprechend umgewandelt wird, so das er wie ein fließkommatyp mit maximal 4 Nachkommastellen wirkt.

wäre bei 1.0 = 1 Tag eine Genauigkeit von 0,144 Minuten
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
newuser01

Registriert seit: 31. Aug 2006
248 Beiträge
 
Delphi 7 Professional
 
#15

Re: Stunden/Minuten in Dezimalwerten

  Alt 13. Apr 2007, 13:40
Also kann ich bei dieser Methode bleiben?

Delphi-Quellcode:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
Start, Ende, Gesamt: TDateTime;
iTmp:Integer
begin

Start := StrToDateTime(eStart.Text); //zb. von 08:00
Ende := StrToDateTime(eEnde.Text); // bis 09:00
Gesamt:= (Ende - Start);

iTmp := Round((Gesamt) * (24*60));

eGesamt.Text := IntToStr(iTmp);

end;
und anschließende Umrechnung der Gesamtminuten in Stunden mit

stunden := gesamtminuten div 60;
wäre das also ziemlich genau ?
Gruß: Holger

[Hobby-Programmierer]
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#16

Re: Stunden/Minuten in Dezimalwerten

  Alt 13. Apr 2007, 13:47
Wenn dir die Minutenauflösung reicht, dann geht es wohl kaum besser.

So hast du ja alles in Minuten und keine weiteren Rundungsfehler mehr ... wäre also gut so ^^
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
newuser01

Registriert seit: 31. Aug 2006
248 Beiträge
 
Delphi 7 Professional
 
#17

Re: Stunden/Minuten in Dezimalwerten

  Alt 13. Apr 2007, 13:51
Ja Minuten reicht aus Sekunden brauch ich nicht ist ja nur zur Privaten Stundenabrechnung (Gesamtminuten werden dann addiert und in Stunden (Dezimalausgabe mit max 3 Kommazeichen) ausgegeben


DANKE FÜR DIE HILFE !!!
Gruß: Holger

[Hobby-Programmierer]
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz