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

Вниз

Типы в 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.012 c
1-19538
Маркыч
2003-03-26 18:28
2003.04.07
CoolBar


8-19708
iNew
2002-12-18 10:30
2003.04.07
Как проиграть wav файл через динамик?


4-19935
Sliski Slimak
2003-01-24 18:15
2003.04.07
Подсказки в стиле WinXP


9-19407
Док
2002-11-05 15:19
2003.04.07
Как создать полноценную карту?


3-19445
новый
2003-03-18 16:06
2003.04.07
Как в IB(FireBird) узнать версию билда?