Forum: Sonstige Fragen zu Delphi
Delphi
by himitsu,
13. Apr 2007
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 ^^
Forum: Sonstige Fragen zu Delphi
Delphi
by himitsu,
13. Apr 2007
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.
stunden := gesamtminuten div 60;
Forum: Sonstige Fragen zu Delphi
Delphi
by himitsu,
13. Apr 2007
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.
i := Round((Ende - Start) * (24*60));
//i = minuten
Round rundet ja auf/ab,...
Forum: Sonstige Fragen zu Delphi
Delphi
by himitsu,
13. Apr 2007
das Format/die FPU rundet standardmäßig auf/ab, also da funktioniert es ... falls aber jemand/etwas in deinem Programm das Rundungsverhalten der FPU umstellt, dann war's das wieder mit dem "es klapp".
Aber im Normalfall sollte es wohl klappen :angel2:
Forum: Sonstige Fragen zu Delphi
Delphi
by himitsu,
13. Apr 2007
TTime/TDate/TDateTime sind eigentlich nur Double (reelle Typen)
und diese haben nunmal Rundungsfehler.
Diese kannst du dann höchstens selber entsprechend der gewünschten Auflösung auf passende Werte runden.