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

Я так понимаю, что храниться число * 10 в степени, равной количеству
разрядов после запятой. Т.е. для numeric 8,4 вместо 12.345 будет храниться
12.345*10^4 = 123450.
Удачи.
...
Рейтинг: 0 / 0
про Numeric и Decimal
    #32593871
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нумерик(18,Х) хранится как инт64 в диалекте 3. более маленькие - в других типах. это я по памяти, а так в доке есть спецпараграф на эту тему
...
Рейтинг: 0 / 0
про Numeric и Decimal
    #32594512
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лентяйя так понимаю, что 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
про Numeric и Decimal
    #32595622
S.G..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторвобщем мне не понятно почему там, типа, проблем с точностью нет... вот в 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
про Numeric и Decimal
    #32595926
Фотография VF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всем спасибо, только ещё один момент, если NUMERIC(8,2), то он тоже в INT64 хранится или только NUMERIC(18,х) хранится как INT64, по крайней мере так я понял из описания?
...
Рейтинг: 0 / 0
про Numeric и Decimal
    #32596060
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там табличка есть. Как чего хранится, при каких разрядах.
...
Рейтинг: 0 / 0
про Numeric и Decimal
    #32596359
leonbn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как лучше поступить, если необходимо хранить большие суммы денег - сотни млн + копейки? Ведь необходимо (20.2), а max (18.2). Замучился с double.
...
Рейтинг: 0 / 0
про Numeric и Decimal
    #32596363
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А скажи мне, мил человек, сто миллионов, это сколько нулей?
Почему ты считаешь, что 18.2 - мало?!
...
Рейтинг: 0 / 0
про Numeric и Decimal
    #32596366
leonbn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не прав :)
...
Рейтинг: 0 / 0
про Numeric и Decimal
    #32598676
gosha777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
leonbnА как лучше поступить, если необходимо хранить большие суммы денег - сотни млн + копейки? Ведь необходимо (20.2), а max (18.2). Замучился с double.

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


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