Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Что есть тип NUMERIC? [D6, FB1.5]


S@shka ©   (2004-06-09 13:17:00) 

Ссылаясь на "Мир Interbase" изд 2.
Стр 21.
Numeric - разрядность от 1 до 18 и точность от 0 до разрялности.
(Разрядность - это общее цисло цифр в числе - точность - число знаков после запятой).
Кроме того дана таблица: Хранение числе с фикс. точностью
Разрядность   Диалект 3
1-4             SMALLINT
5-9             Integer
10-18           INT64
------------------------------------------------------------
NUMERIC (10,2) - я так понимаю - это число у которого всего 10 цифр из которых до 2 после запятой.
Но почему тогда я в это поле могу внести значение
1 123 123 123, 11 - и оно корректно запишется???
NUMERIC (9,8)
позволяет хранить
11,111
но
111,111  - уже ошибка.
---------------------------------------------------------------
ОБъясните плиз, что да как с форматами данных с фиксированной точкой.


Alexandr   (2004-06-10 07:01:00) [1]

Fay ©   (09.06.04 16:48) [11]
2Alexandr ©   (09.06.04 13:32) [1]
Int64 = numeric(18, 0)

да, в некоторых случаях другое обозначение сути вопроса не меняет.


Anatoly Podgoretsky   (2004-06-09 16:58:00) [2]

Johnmen ©   (09.06.04 16:07) [9]
В других DECIMAL является BCD, а NUMERIC нет, иногда это одинаково.


Fay   (2004-06-09 16:48:00) [3]

2Alexandr ©   (09.06.04 13:32) [1]
Int64 = numeric(18, 0)


Alexandr   (2004-06-09 16:17:00) [4]

... с кучей специфичных особенностей в зависимости от версии, диалекта, фазы луны и прочего


Johnmen   (2004-06-09 16:07:00) [5]

Вообще говоря, NUMERIC и DECIMAL это псвдотипы. Которым соответствуют реальные FLOAT, DOUBLE PRECISION,SMALLINT,INT,BIGINT в зависимости от версии сервера и диалекта.


S@shka   (2004-06-09 15:42:00) [6]

Немножноко не корректно конечно....
Вот как правильно....
смотрится влазит ли число полностью с домножением на
10^точность типа
в указанный "подтип".
Для случая NUMERIC (9,8) подтип=INTEGER 2 147 xxx xxx
тогда иммеем 11,ххх   => 11 * 10^8  =   1 1xx xxx xxx
и           111,xxx   =>111 * 10^8  =  11 1xx xxx xxx  - ПЕРЕБОР!!

Еще раз всем спасибо.
В книжке все таки криво рассморен вопрос с типами данных!!!!


S@shka   (2004-06-09 15:24:00) [7]

> Johnmen
большое спасибо - тоесть на самом деле просто на тип и надо ориентироваться.


Johnmen   (2004-06-09 14:50:00) [8]

>S@shka ©   (09.06.04 13:17)  
Разрядность   Диалект 3
1-4             SMALLINT
5-9             Integer
10-18           INT64
>NUMERIC (10,2) - я так понимаю - это число у которого всего 10
>цифр из которых до 2 после запятой.

Это INT64 (он же BIGINT).

>Но почему тогда я в это поле могу внести значение
>1 123 123 123, 11 - и оно корректно запишется???

Потому, что 112312312311 вполне влазит туда.

>NUMERIC (9,8)
>позволяет хранить
>11,111
>но
>111,111  - уже ошибка.

Потому, что 111111 не влазит в SMALLINT.


bushmen   (2004-06-09 14:47:00) [9]

Сам же говорил: "NUMERIC (10,2) - я так понимаю - это число у которого всего 10 цифр из которых до 2 после запятой."


S@shka   (2004-06-09 14:35:00) [10]

А как должно быть????
Я поэтому и вопрос задаю.


bushmen   (2004-06-09 14:22:00) [11]

Не знаю как в FB, а в MSSQL все так , как и должно быть! :)


S@shka   (2004-06-09 13:35:00) [12]

Сомнительный ответ :)
Но все равно спасибо.


Alexandr   (2004-06-09 13:32:00) [13]

а может ну их нафиг, а?
использовать только Integer (int64) и double precision
с которыми все более чем прозрачно.


Наверх

Титульная страница Поиск, карта сайта Написать письмо