Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Mit Zeitwerten rechnen -> Wege, um StrToTime zu umgehen ?
trm - Di 15.11.11 22:48
Titel: Mit Zeitwerten rechnen -> Wege, um StrToTime zu umgehen ?
Hi,
in MaskEditfeldern habe ich verschiedene Uhrzeiten stehen im Format:
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.:
Quelltext
1: 2:
| Edit1 = 07:00 Edit2 = 12:00 |
Nun versuche ich mit einem definierten Intervall Bsp.:
die Startzeit bis zur Endzeit zu durchlaufen und einen Wert mit einem anderen zu vergleichen.
Dies scheitert wohl an der Umrechnung..
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
Narses: Topic aus Sonstiges (Delphi) verschoben am Di 15.11.2011 um 22:52
jaenicke - 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 - Di 15.11.11 23:40
gegf. MinutesBetween oder SecondsBetween < x aus den DateUtils ....
trm - 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) ?
jaenicke - 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. ;-)
trm - Mi 16.11.11 13:03
Ok, ich habs :)
Vielen Dank nochmals an euch, ihr seid super :)
Gruß aus der kalten Mitte Deutschlands ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!