AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi MinutesBetween - Wie Ungenauigkeit verhindern?
Thema durchsuchen
Ansicht
Themen-Optionen

MinutesBetween - Wie Ungenauigkeit verhindern?

Ein Thema von Daniel G · begonnen am 15. Nov 2006 · letzter Beitrag vom 16. Nov 2006
Antwort Antwort
Daniel G
(Gast)

n/a Beiträge
 
#1

MinutesBetween - Wie Ungenauigkeit verhindern?

  Alt 15. Nov 2006, 16:35
N'Abend

Wenn ich mithilfe der Funktion MinutesBetween die Differenz zweier Zeiten ermittel will, stoße ich auf folgendes Problem:

12:10:10 => 14:10:10 = 120 Min. Differenz
12:20:20 => 14:20:20 = 119 Min. Differenz

Gibt es eine elegante Lösung für dieses Problem?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: MinutesBetween - Wie Ungenauigkeit verhindern?

  Alt 15. Nov 2006, 16:41
Hallo,

zeig mal den Code.
Du machst da was verkehrt.
Wahrscheinlich dort noch Millisekunden irgendwo drin.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: MinutesBetween - Wie Ungenauigkeit verhindern?

  Alt 15. Nov 2006, 16:44
Nein, tut er nicht.

Delphi-Quellcode:
showmessage(inttostr(MinutesBetween(EncodeTime(12,10,10,0),EncodeTime(14,10,20,0))));
showmessage(inttostr(MinutesBetween(EncodeTime(12,20,10,0),EncodeTime(14,20,20,0))));
Ergebnis:
1. Messagebox: 120
2. Messagebox: 119

Ich denke mal, das ist das typische Problem der Ungenauigkeit mit Floats.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
verwirrt

Registriert seit: 9. Jun 2006
59 Beiträge
 
Delphi 6 Professional
 
#4

Re: MinutesBetween - Wie Ungenauigkeit verhindern?

  Alt 15. Nov 2006, 16:47
Hallo,

unter Delphi 6 mit Update 2 bekomme ich da jeweils 120,

werd noch ein paar andere Werte testen.

Gruß
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#5

Re: MinutesBetween - Wie Ungenauigkeit verhindern?

  Alt 15. Nov 2006, 16:47
Zitat von hoika:
Du machst da was verkehrt.
Wie 0815 schon gesagt hat, das tu' ich nicht. Zumindest wüsste ich das nicht.

MinutesEdit.Text := IntToStr(MinutesBetween(StrToTime(TimeFromMskEdt.Text),StrToTime(TimeToMskEdt.Text))); Ich denke mal, das hängt damit zusammen, dass TDateTime intern ein Double - Wert ist. Ich wollte halt nur wissen, ob's zum Kompensieren dieses Problems schon eine Funktion gibt oder nicht.

//Edit:
@verwirrt: Ähä...
  Mit Zitat antworten Zitat
verwirrt

Registriert seit: 9. Jun 2006
59 Beiträge
 
Delphi 6 Professional
 
#6

Re: MinutesBetween - Wie Ungenauigkeit verhindern?

  Alt 15. Nov 2006, 16:57
mh,

müsste lauten:

Delphi-Quellcode:
showmessage(inttostr(MinutesBetween(EncodeTime(12,10,10,0),EncodeTime(14,10,10,0))));
showmessage(inttostr(MinutesBetween(EncodeTime(12,20,10,0),EncodeTime(14,20,10,0))));
3_of_8 hat in der zweiten Zeile

... EncodeTime(12,20,10,0),EncodeTime(14,20,20,0)))); ...

was natürlich mit 10 Sekunden über den 120 Minuten klare 120 ergab.

Fazit: ich kann das mit den 119 jetzt nachvollziehen.

Edit: Möglicher Workaround: nimm MilliSecondsBetween oder SecondsBetween und runde...

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: MinutesBetween - Wie Ungenauigkeit verhindern?

  Alt 15. Nov 2006, 17:07
Hoppala, hab ich mich vertippt. Getestet hab ichs aber richtig, nur hier wohl falsch abgeschrieben.

TDateTime ist übrigens deklariert als ein type Double, hat also die gleichen Eigenschaften wie ein Double.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: MinutesBetween - Wie Ungenauigkeit verhindern?

  Alt 16. Nov 2006, 07:39
Wieso nicht einfach

  MyMinutesBetween := Trunc (0.5 + (aDate - anotherDate)*1440);
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#9

Re: MinutesBetween - Wie Ungenauigkeit verhindern?

  Alt 16. Nov 2006, 21:35
MyMinutesBetween := Trunc (0.5 + (aDate - anotherDate)*1440); Hm ich würde es so machen

Delphi-Quellcode:

MyMinutesBetween as Int64 := Round(aDate * 1440) - Round(anotherDate * 1440);
Das dürfte die entstehende "Ungenauigkeit" der Subtrakton beider TDateTime=Double eliminieren und zusätzlich noch durch Round() auf beiden Seiten Rundungsfehlern entgegenwirken.

Gruß Hagen
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#10

Re: MinutesBetween - Wie Ungenauigkeit verhindern?

  Alt 16. Nov 2006, 21:38
Danke für die Tipps. Was wäre ich bloß ohne euch.
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:23 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