Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];

Вниз

Ошибка округления 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.046 c
15-1190521963
Nastena
2007-09-23 08:32
2007.10.28
Как установить Виндуоз ХР с форматирование диска


6-1171023506
Alek_1
2007-02-09 15:18
2007.10.28
Как определить хендл открытого удаленного подключения к ине...


2-1191398280
Riply
2007-10-03 11:58
2007.10.28
Создание резервной копии для отдельного файла.


2-1191743251
мфтнф_й
2007-10-07 11:47
2007.10.28
TCustomListBox -- OnDblClick


15-1191063036
tmp
2007-09-29 14:50
2007.10.28
Pierre le Riche, Delphi 2005 Lite





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский