Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / про Numeric и Decimal / 11 сообщений из 11, страница 1 из 1
07.07.2004, 16:27:06
    #32593810
VF
VF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
про Numeric и Decimal
вот, блин, тема больная у меня... может в отпуск пора???
вобщем вопрос в следующем состоит:
я так понимаю, что NUMERIC и DECIMAL в 3 диалекте хранятся как INT64, только как именно, левая и правая части отдельно что ли?
если можно, то ткните меня в ссылку по этому вопросу, а то на ИБФоеникс.ком ведут все ссылки, а там этой статьи уже нету, если она там вообще была...
вобщем мне не понятно почему там, типа, проблем с точностью нет... вот в 1 диалекте всё предельно ясно, NUMERIC хранится как DOUBLE..., поэтому и ошибки при вычислении вылазют, а в 3 диалекте если не вылазют, то почему???
ЗЫ если непонятно высказался, готов поправиться...
...
Рейтинг: 0 / 0
07.07.2004, 16:50:13
    #32593866
Лентяй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
про Numeric и Decimal
я так понимаю, что NUMERIC и DECIMAL в 3 диалекте хранятся как INT64,
только как именно, левая и правая части отдельно что ли?

Я так понимаю, что храниться число * 10 в степени, равной количеству
разрядов после запятой. Т.е. для numeric 8,4 вместо 12.345 будет храниться
12.345*10^4 = 123450.
Удачи.
...
Рейтинг: 0 / 0
07.07.2004, 16:52:02
    #32593871
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
про Numeric и Decimal
нумерик(18,Х) хранится как инт64 в диалекте 3. более маленькие - в других типах. это я по памяти, а так в доке есть спецпараграф на эту тему
...
Рейтинг: 0 / 0
08.07.2004, 08:41:45
    #32594512
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
про Numeric и Decimal
Лентяйя так понимаю, что NUMERIC и DECIMAL в 3 диалекте хранятся как INT64,
только как именно, левая и правая части отдельно что ли?

Я так понимаю, что храниться число * 10 в степени, равной количеству
разрядов после запятой. Т.е. для numeric 8,4 вместо 12.345 будет храниться
12.345*10^4 = 123450.
Удачи.
Совершенно верно. Builder воспринимает этот тип как BCD - Binary Coded Decimal. И в клиентской софтине TBCDField->Value представлен как Currency для отображения в гриде и как TBCDField->AsBCD для хранения. Но если в режиме отладки посмотреть значения, то для NUMERIC(18, 2) увидишь 10025 вместо 100.25
В хелпе сказано что этот тип представлен структурой
Код: plaintext
1.
2.
3.
4.
5.
struct TBcd
{
  Byte Precision;
  Byte SignSpecialPlaces;
  Byte Fraction[ 32 ];
} ;
...
Рейтинг: 0 / 0
08.07.2004, 14:53:10
    #32595622
S.G..
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
про Numeric и Decimal
авторвобщем мне не понятно почему там, типа, проблем с точностью нет... вот в 1 диалекте всё предельно ясно, NUMERIC хранится как DOUBLE..., поэтому и ошибки при вычислении вылазют
Когда число хранится в виде числа с плавающей запятой (double), то к примеру если у нас есть переменные A и B, и мы ожидаем что после некоторых вычислений в них получилось число 17, на самом деле там может быть A=17.000000001, B=16.9999999999; поэтому нельзя сравнивать на равенство так: A=B, а надо так: if abs(a-b) < 0.001.
С числами которые хранятся в виде числа с фиксированной запятой (decimal),
такого не происходит, то есть 17 оно и будет 17. Но, например
если есть переменная C типа numeric(18,2), и мы напишем
C= 12789/ 12789000, то результат будет 0.00, а не 0.001.
...
Рейтинг: 0 / 0
08.07.2004, 16:23:29
    #32595926
VF
VF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
про Numeric и Decimal
всем спасибо, только ещё один момент, если NUMERIC(8,2), то он тоже в INT64 хранится или только NUMERIC(18,х) хранится как INT64, по крайней мере так я понял из описания?
...
Рейтинг: 0 / 0
08.07.2004, 17:15:01
    #32596060
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
про Numeric и Decimal
Там табличка есть. Как чего хранится, при каких разрядах.
...
Рейтинг: 0 / 0
08.07.2004, 20:04:01
    #32596359
leonbn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
про Numeric и Decimal
А как лучше поступить, если необходимо хранить большие суммы денег - сотни млн + копейки? Ведь необходимо (20.2), а max (18.2). Замучился с double.
...
Рейтинг: 0 / 0
08.07.2004, 20:07:39
    #32596363
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
про Numeric и Decimal
А скажи мне, мил человек, сто миллионов, это сколько нулей?
Почему ты считаешь, что 18.2 - мало?!
...
Рейтинг: 0 / 0
08.07.2004, 20:16:32
    #32596366
leonbn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
про Numeric и Decimal
Я не прав :)
...
Рейтинг: 0 / 0
11.07.2004, 02:12:06
    #32598676
gosha777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
про Numeric и Decimal
leonbnА как лучше поступить, если необходимо хранить большие суммы денег - сотни млн + копейки? Ведь необходимо (20.2), а max (18.2). Замучился с double.

Храни в копейках. У нас все банковские программы оперируют копейками. Перевод в гривны - на этапе формирования выходных документов. И ни каких проблем. (БД - SyBase). Хотя иногда это бывает неприемлемо - как сейчас у меня на задаче которую пишу на FB 1.5
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / про Numeric и Decimal / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]