Форум: "Базы";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];
ВнизТипы в IB Найти похожие ветки
← →
Наташа (2003-03-17 08:51) [0]Мастера Delphi! нужен совет. Какой тип лучше использовать в IB , если нужно действительное число. Тип Float при умножении дает весьма солидную погрешность. Заранее благодарна.
← →
Big_Rom (2003-03-17 08:57) [1]numeric(n,m) -n сколько всего знаков m сколько знаков после запятой
← →
Alexandr (2003-03-17 09:03) [2]double precision
← →
zacho (2003-03-17 09:06) [3]Double precision
← →
Sergey13 (2003-03-17 09:41) [4]2Наташа © (17.03.03 08:51)
Присоединяюсь, к вышесказаному, но добавлю, что сразу надо озаботьтся функцией округления чисел до нужного знака. Ибо проблемы с "действительностью" чисел в ИБ скорее всего будут иметь место.
← →
Наташа (2003-03-17 10:59) [5]Большое спасибо за советы и, если не сложно, раскажите о функции округления до нужного знака.
← →
Alexandr (2003-03-17 11:17) [6]round из UDF
← →
Наташа (2003-03-17 11:41) [7]Спасибо!
← →
Alexandr (2003-03-17 11:47) [8]НЕТ, это тебе спасибо. что ты такая догадливая.
И не пришлось тебе разжовывать что такое UDF, где ее брать, и как с ней работать. :)
Да и еще, совет тебе на будушее:
перейди на Firebird 1.0.2
или даже на Yaffil
багов там гораздо меньше, а функциональность гораздо шире.
переход, кстати будет абсолютно безболезненным через backup\restore
← →
Сергєєв Володимир (2003-03-20 07:36) [9]Я лично пользуюсь
SOME_FIELD DECIMAL(10,3)
для хранения денежных величин, то есть когда требуется хранить два знака после запятой. Третий - про запас. Практика показала, что таким образом можно обойти проблему потери копейки при округлении. Особенно этот глюк характерен для ib_udf.dll.
Так что, может послушай Alexandera и возьми FireBird
Я, лично, - мазохист и люблю InterBase.
А насчет округления - тут Round не всегда подходит. Round работает как математическое округление. А есть еще банковское(округление до ближайшего четного).То есть, если округляешь вещественные числа - пожалуста, а если работаешь с бабками, то пищи де-нить udf*.dll-ку, имеющую эту функцию. Например на ibase.ru их там дофига на любой вкус и цвет.
Различия округлений состоит в том, что
--------------------------------------------
ЧИСЛО МАТЕМАТ. БАНКОВСКОЕ
--------------------------------------------
20,3 20 20
20,5 21 20
20,8 21 20
21,0 21 21
21,1 21 22
21,6 22 22
← →
Johnmen (2003-03-20 09:30) [10]>Сергєєв Володимир © (20.03.03 07:36)
>SOME_FIELD (10,3)
>для хранения денежных величин, то есть когда требуется хранить >два знака после запятой.
Суррогатный тип DECIMAL в данном случае есть реальный DOBLE PRECISION. Это по поводу хранения... А (10,3) - это по поводу отображения...:)
← →
zacho (2003-03-20 09:40) [11]
> Сергєєв Володимир © (20.03.03 07:36)
Советую почитать в Data Definition Guide о том, как хранятся NUMERIC и DECIMAL, а так же о разнице между NUMERIC и DECIMAL в диалекте 1 и диалекте 3
← →
Сергєєв Володимир (2003-03-20 10:56) [12]>> 2 Johnmen ©
>> А (10,3) - это по поводу отображения...:)
Ну дык вот. Проводим мы операцию, скажем отпускаем товар по какой-то цене скажем 0,234 кг. И получаем "на сумму" = 5,19999.... Мы и храним эти 5,19999999.... Но, если ставим в ИнтерБазе тип DECIMAL(10,2), и ставим в DBGride или QRDBText совойство Mask в #0.00, типа рубли и копейки, то эти компоненты получат "5,19", затем округлят его по Round-у и получат соотвественно 5,19. А когда посчитаем хранимой процедурой ТОТАЛ по накладной, то она все правильно проссумирует и вернет значение, превыщающую "визуальную" сумму по всем позициям накладной минимум на одну копейку, а то на две и на три. Вот и объясни это клиенту, что в базе хранится правильное значение, а это программа отображает их неправильно.
А когда ставим в ИнтерБазе тип DECIMAL(10,3), то компоненты получат "5,199" и округлят их согласно маске по Round"у до "5,20". Вот и получиться, что избегаем потери копейки.
zacho ©
>>Советую почитать в Data Definition Guide
У тебя есть какие-то вопросы по содержанию этой книжки? Если есть - мыль, объясню.
Я еще раз внимательно перечитал суть вопроса и чистосердечно признаю, что не понял его с первого раза, а думал, что вопрос по поводу отображения данных, а не по поводу их хранения.
На момент написания моей реплики как раз и был задан вопрос по поводу округления. Вот я на него и попытался ответить. А не на тему этого форума.
← →
Johnmen (2003-03-20 12:14) [13]>Сергєєв Володимир © (20.03.03 10:56)
>Но, если ставим в ИнтерБазе тип DECIMAL(10,2), и ставим в
>DBGride или QRDBText совойство Mask в #0.00, типа рубли и
>копейки, то эти компоненты получат "5,19", затем округлят его
>по Round-у и получат соотвественно 5,19.
Вот это как раз совсем не так !
Значение поля будет получено как оно описано в приложении, т.е. как Float. Компоненты отображения с указанием маски действительно округлят по ней, и получим : хотели хранить 5.2, реально храниться 5.1999..., реально получили 5.1999..., отображается 5.20
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c