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

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

Сравнение полей DOUBLE PRECISION в запросе [D7, FireBird 1.5]


Страницы:   1 2 3

grav ©   (2008-05-28 16:11:00) 

Есть в таблице поле типа DOUBLE PRECISION.
Все бы хорошо, но значения этих полей отображаются так:
если, например, в поле таблицы значение = 0.4, то в поле DBEdit отобразится 0.39999999898989. Это поправимо, устанавливаем в свойствах IBDataSet для данного поля Precision=5 и имеем в DBEdit 0.4.
Но вот потребовалось сравнить два таких поля в SQL. Оказалось, что нет в таблице в базе двух одинаковых значений. Что не так?


Johnmen   (2008-05-29 22:31:00) [1]

Может пора-таки документацию почитать?


grav   (2008-05-29 22:28:00) [2]

Если я не знаю какое значение будет хранится в поле, знаю только, что оно будет вещественное. Если я не знаю, сколько цифр будет его целая часть и сколько после запятой. Как можно использовать NUMERIC? Задавать максимальный размер?


grav   (2008-05-29 22:20:00) [3]


> Anatoly Podgoretsky ©   (29.05.08 17:00) [49]

Я про это и написал.
FloatToStr даст 0.1 из 0.100000001490116


Anatoly Podgoretsky   (2008-05-29 17:00:00) [4]

> grav  (29.05.2008 12:28:31)  [31]

0.1 тоже нельзя представить


Anatoly Podgoretsky   (2008-05-29 16:58:00) [5]

> grav  (28.05.2008 16:57:10)  [10]

.4 не возможно представить в формате с плавающей запятой.


MsGuns   (2008-05-29 16:39:00) [6]

>Johnmen ©   (29.05.08 16:11) [45]
>Для IB/FB при определенных значениях NUMERIC и DECIMAL это не так.

Вполне может быть - слишком давно не работал с ИБ
Но дело, в общем, не в этом. Такой подход, ИМХО, весьма полезен СУБД-разработчику при проектировании как бизнес-логики сервера, так и прикладных решений. Дабы не заморачиваться проблемами, подобными сабжевой.


Reindeer Moss Eater   (2008-05-29 16:30:00) [7]

http://img143.imageshack.us/img143/863/numericdtyl8.jpg


Johnmen   (2008-05-29 16:11:00) [8]


> MsGuns ©   (29.05.08 14:19) [43]

Для IB/FB при определенных значениях NUMERIC и DECIMAL это не так.


Reindeer Moss Eater   (2008-05-29 14:38:00) [9]

ХРАНЯЩИХСЯ КАК ЧИСЛО С ПЛАВАЮЩЕЙ ТОЧКОЙ

разве?


MsGuns   (2008-05-29 14:19:00) [10]

NUMERIC, DECIMAL и т.д. служат лишь УКАЗАНИЕМ серверу для ОКРУГЛЕНИЯ УКАЗАННОГО КОЛ-ВА РАЗРЯДОВ при подготовке данных, ХРАНЯЩИХСЯ КАК ЧИСЛО С ПЛАВАЮЩЕЙ ТОЧКОЙ, к отправке клиенту - как они будут обрабатываться на клиенте (округляться, сравниваться, умножаться и т.д. - ему серобуромалиново).

Прежде чем "менять мироощущение", может, стоило бы почитать что-нибудь ? Пока "операторы неустанно  вбивают".


Ослик   (2008-05-29 13:12:00) [11]

[41] grav   (29.05.08 13:05)
для понимания полезно документацию читать.

нумерик хранит все ввиде целочисленого значения.
например, нумерик(10,3) число 134.56 будет хранить как 134560.
по-крайней мере это справедливо для третьего диалекта ИБ.


grav   (2008-05-29 13:05:00) [12]


> Ослик   (29.05.08 12:37) [38]

Я и не спорю, но пока обойдусь ABS в запросе.
В основном из-за того, что не понимаю тип NUMERIC. Хотя использую его для больших значений состоящих из целых чисел.


grav   (2008-05-29 12:52:00) [13]


> Reindeer Moss Eater ©   (29.05.08 12:39) [39]
>
> То что сравнивать плавающую точку на равенство в той статье
> не рекомендуют.

С этим согласен.
У меня вообще мироощущение поменялось с сегодняшнего дня. Я теперь компьютерам и калькуляторам не доверяю.
Помнится во времена учебы моей (1993-1999) преподаватели сильно сокрушались по поводу прекращения выпуска и развития семейства СМ и ЕС ЭВМ. Что то как раз говорили про мантиссу, и что интел и в подметки не годится :(


Reindeer Moss Eater   (2008-05-29 12:39:00) [14]

А чего не так то?

То что сравнивать плавающую точку на равенство в той статье не рекомендуют.


Ослик   (2008-05-29 12:37:00) [15]

[34] grav   (29.05.08 12:32)
На тестовой базе пишется и отлаживается скрипт.
Затем в конце рабочего дня после стандартного ежедневного бакапа базы он запускается и на твоих мизерных данных отрабатывает в течении 0.004 секунды.


grav   (2008-05-29 12:37:00) [16]


> Reindeer Moss Eater ©   (29.05.08 12:29) [33]
> А говорил читал статью

А чего не так то?
Я понял, что ни 0.1, ни мои 0.4 (или 13.4) в базу записать точно нельзя. Точно также как и достать из базы. Но если записаны в базу double, то и считаны будут double.
Одно плохо, что мне надо сравнить например, 0.5 записанное в базу и SUM(0.4+0.1). Боюсь, что равенства не будет, а потому ABS  мне поможет (наверное)


Reindeer Moss Eater   (2008-05-29 12:36:00) [17]

сравнивай разность значений с допустмо малой величиной.


Правильный_Вася   (2008-05-29 12:36:00) [18]


> 6 операторов с 8 до 17 часов заколачивают в базу данные
>  Никто не даст остановить работу.

у тебя в 2 раза больше времени, чем у них - с 17 до 8


grav   (2008-05-29 12:32:00) [19]


> Ослик   (29.05.08 12:16) [29]

6 операторов с 8 до 17 часов заколачивают в базу данные. Еще 2 ведут контроль на правильность забивки. Никто не даст остановить работу.
Файл программы мне еще удается менять, как только кто то из операторов захочет чайку :)


Reindeer Moss Eater   (2008-05-29 12:29:00) [20]

А говорил читал статью


Страницы:   1 2 3

Наверх

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