Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.28;
Скачать: CL | DM;

Вниз

Ошибка округления Trunc   Найти похожие ветки 

 
_Даня   (2007-08-17 14:33) [0]

Не первый раз отлавливаю ошибку округления Trunc, например:
Trunc(Form.Query1.FieldByName("Y").AsFloat * 100)
При открытом НД возвращает 43068, хотя в базе хранится значение 430.69
С базой это не связано, тоже самое происходит и со строковыми преобразованиями. Прямой вызов Trunc(43069.0) дает правильный результат. Ошибка стойкая, разница всегда либо 1, либо -1 (на разных сочетаниях последних двух цифр). Дополнительной проверкой можно это дело пресечь, но хотелось бы докопаться до причины. Никто не сталкивался? Спасибо, кто откликнется.


 
Сергей М. ©   (2007-08-17 14:37) [1]


> Ошибка стойкая, разница всегда либо 1, либо -1


см.  SetRoundMode


 
MBo ©   (2007-08-17 14:45) [2]

430.69 * 100 < 43069 ввиду ограниченной точности представления чисел с плавающей запятой, так что никакой ошибки Trunc здесь нет
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=374


 
Плохиш ©   (2007-08-17 15:01) [3]


> Не первый раз отлавливаю ошибку округления Trunc

Вообще-то trunc - это не округление, а обрезание того, что после запятой. А округление в пасклале и делфи всегда кликалось round.


 
_Даня   (2007-08-17 15:29) [4]


> Плохиш ©   (17.08.07 15:01) [3]
> trunc - это не округление

Извиняюсь - оговорился.

> MBo ©   (17.08.07 14:45) [2]

Спасибо, очень интересная статья - проглядел, но надо посидеть, почитать внимательно и вдумчиво.

Но пока практический результат получить не удалось: SetRoundMode=rmUp дает правильный результат для положительных значений, очевидно rmDown (не проверял) - для отрицательных. Читаемые значения могут быть как положительными, так и отрицательными. Правильно ли я понимаю, что без дополнительной проверки  получить правильно целочисленный результат из вещественного аргумента нельзя или есть другие способы? round и int как я понимаю работают аналогично trunc.


 
Плохиш ©   (2007-08-17 15:40) [5]


> round и int как я понимаю работают аналогично trunc.

К счастью фирму борланд незаботит чьё-то понимание и они описали работу этих функций в справке...


 
_Даня   (2007-08-17 15:44) [6]


> Плохиш ©   (17.08.07 15:40) [5]
> > round и int как я понимаю работают аналогично trunc.К
> счастью фирму борланд незаботит чьё-то понимание и они описали
> работу этих функций в справке...

аналогично в свете статьи :  http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=374
не буквально же



Страницы: 1 вся ветка

Текущий архив: 2007.10.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
15-1191578295
Германн
2007-10-05 13:58
2007.10.28
С Днем Учителя!


2-1191512951
ist
2007-10-04 19:49
2007.10.28
язык в версии файла....


15-1191497196
iZEN
2007-10-04 15:26
2007.10.28
50 лет первому ИСЗ, во что верить?


15-1190719395
ja
2007-09-25 15:23
2007.10.28
вызываемый номер при создании подключения gprs beeline


1-1186743437
Dash Rendar
2007-08-10 14:57
2007.10.28
Можно ли добавить контекстное меню в ShellListView?