|
|
|
запутался с датами Borland C++ Builder
|
|||
|---|---|---|---|
|
#18+
запутался с датами Borland C++ Builder использую TDateTime (Borland C++ Builder) работаю с датами, произвожу различные вычисления и т.п. под конец у меня начинают сказываться ошибки округления при сравнении. Т.е., для примера Код: plaintext 1. 2. 3. с ними я делаю манипуляции, суть которых сводится к: Код: plaintext 1. после этого оператор == класса TDateTime считает, что это разные величины, т.е. ( a == b ) == false; Код: plaintext 1. 2. 3. 4. но если выводить даты с точностью до миллисекунд, они получаются равными. для данного случая: выводит дату функция FormatDateTime( "yyyy-mm-dd hh:nn:ss:zzz", a_dt ); получается: 2005-06-02 00:00:00:000 38505,000000000000000000 2005-06-02 00:00:00:000 38505,000000000996800000 дата не изменилась, а значение изменилось. может есть какая хитрость, что бы встроенный оператор == перестал учитывать эти погрешности и начал сравнивать только значимые части даты? Или я не врубился во что-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2006, 15:32 |
|
||
|
запутался с датами Borland C++ Builder
|
|||
|---|---|---|---|
|
#18+
уточнение: до += 1E-9: as TDateTime 2005-06-02 00:00:00:000 as double 38505,000000000000000000 после += 1E-9: as TDateTime 2005-06-02 00:00:00:000 as double 38505,000000000996800000 дата не изменилась, а значение изменилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2006, 15:34 |
|
||
|
запутался с датами Borland C++ Builder
|
|||
|---|---|---|---|
|
#18+
Ну если у вас С++ Builder, используйте CompareDateTime из DateUtils ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2006, 15:46 |
|
||
|
запутался с датами Borland C++ Builder
|
|||
|---|---|---|---|
|
#18+
Масенокдата не изменилась, а значение изменилось дело в способе хранения даты - это обычный double, целая часть которого - это дни, а дробная - часть суток. double - весьма приблизительный тип данных, вот и неточности сравнения казалось бы одинаковых дат Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2006, 15:47 |
|
||
|
запутался с датами Borland C++ Builder
|
|||
|---|---|---|---|
|
#18+
да, спасибо, разобрался! a 2005-06-02 00:00:00:000 38505,000000000000000000 b 2005-06-02 00:00:00:000 38505,000000000000000000 c 2005-06-02 00:00:00:000 38505,000000000000000000 --------------------------------------------------------------------------- a +=1E-9 2005-06-02 00:00:00:000 38505,000000000996800000 b -=1E-9 2005-06-02 00:00:00:000 38504,999999999003200000 2005-06-02 00:00:00:000 38505,000000000000000000 --------------------------------------------------------------------------- сравнение с CompareDateTime нормально сравнивает. Странно, что они не реализовали это в самом TDateTime, вроде сам бог велел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2006, 22:35 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=343&tid=2030832]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 312ms |

| 0 / 0 |
