Re: ошибки округления в TDateTime?
От: Hruks Россия www.hruks.com
Дата: 26.08.08 06:02
Оценка:
Здравствуйте, svg2003, Вы писали:

S>похоже вылез очередной баг VCL-ля.


int(0.9999999999999995559) и должен быть равен 0. Тут как раз всё верно.

Единственный ньюанс это небольшая неточность при конвертации из строки в число: TDateTime t2( "01:00:00" );
Но это вполне допустимо.
Работа с плавающей точкой требует аккуратности.
Например нельзя сравнивать числа с плавающей точкой на равестнство.
Вместо этого нужно сравнивать модуль разности чисел с константой точности.

Для Вашего примера характерна ещё одна неосторожность в работе с плавающей точкой — целочисленное откидывание дробной части (преобразование к инту)
Либо прибавляйте 0.5 к переменной t1 перед преобразованием к int, либо используйте функцию округления (trunc) вместо отбрасывания целой части (int).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.