Autor Beitrag
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Di 15.11.11 22:48 
Hi,


in MaskEditfeldern habe ich verschiedene Uhrzeiten stehen im Format:

ausblenden Delphi-Quelltext
1:
!90:00;1;_					


so dass Zeiten von 00:00 bis 23:59 (Uhr) möglich sind (wird extra geprüft).

Es gibt paarweise zwei Felder, eines für den Start und eines für das Ende Bsp.:

ausblenden Quelltext
1:
2:
Edit1 = 07:00
Edit2 = 12:00


Nun versuche ich mit einem definierten Intervall Bsp.:

ausblenden Quelltext
1:
Intervall = 15					


die Startzeit bis zur Endzeit zu durchlaufen und einen Wert mit einem anderen zu vergleichen.

Dies scheitert wohl an der Umrechnung..

ausblenden Delphi-Quelltext
1:
StrToTime(Edit1.Text + ':00')					


..da hier irgendwie ein Rundungfehler eintritt (?)

Bei manchen Werten wird der Vergleich korrekt ausgeführt, bei manch anderen nicht.

Dies hier wird positiv verglichen: 0,34375
Dies hier nicht: 0,36458333333

Im Debugger sind aber die Werte bei mVergleich gleich.

Was kann ich da tun ?


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Di 15.11.2011 um 22:52

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 15.11.11 23:12 
Wie vergleichst du denn?

Gleitkommazahlen lassen sich nicht per = vergleichen, da es durch die interne Darstellung kleine Abweichungen geben kann. Es gibt in der Unit Math aber die Funktion SameValue dafür.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Di 15.11.11 23:40 
gegf. MinutesBetween oder SecondsBetween < x aus den DateUtils ....

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
trm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Mi 16.11.11 01:14 
Danke euch beiden.

Mir reicht der Vergleich mittels SameValue.
Komisch nur, dass eine Subtraktion genauer arbeitet als ein Vergleich.
Verstehen kann ich das leider nicht :(

Ist dieses Verhalten in höheren Versionen nach Delphi 7 immer noch so (ist das vielleicht gewollt) ?

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 16.11.11 06:43 
Umgekehrt:
Der Vergleich arbeitet genauer. Und eben zu genau in vielen Fällen, weil zwei Werte sich weit hinter dem Komma durch die Binärdarstellung im PC unterscheiden können, die man eigentlich als gleich ansieht. Deshalb schaut die Funktion nicht, ob die Zahl exakt gleich ist, sondern ob die Differenz unterhalb der Darstellungsungenauigkeit ist. ;-)
Dude566
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Mi 16.11.11 11:46 
Weil ich es gerade passend finde: www.michael-puff.de/...el/Fliesskomma.shtml

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
trm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Mi 16.11.11 13:03 
Ok, ich habs :)

Vielen Dank nochmals an euch, ihr seid super :)

Gruß aus der kalten Mitte Deutschlands ;)

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)