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. Оказалось, что нет в таблице в базе двух одинаковых значений. Что не так?


Reindeer Moss Eater   (2008-05-28 17:04:00) [41]

Вот пример, копирую из DBGrid:
значение поля по предприятию 14,3999996185303 (вводили 14,4)
сумма по зданиям 14,3999999761581
Почему 14,4 стало 14,3999996185303?


Потому что тип с плавающей точкой.


grav   (2008-05-28 17:00:00) [42]


> Prohodil Mimo ©   (28.05.08 16:45) [5]
> а ты уверен, что поле именно DOUBLE PRECISION, а не Number
> или что-то подобное?

Уверен, изначально задавал. Но значение Precision не указывал для полей в IBDataSet, может надо было ограничить.


grav   (2008-05-28 16:57:00) [43]


> sniknik ©   (28.05.08 16:50) [9]

Вот пример, копирую из DBGrid:
значение поля по предприятию 14,3999996185303 (вводили 14,4)
сумма по зданиям 14,3999999761581
Почему 14,4 стало 14,3999996185303?


sniknik   (2008-05-28 16:50:00) [44]

станут ли равны 500,43 и 500,42 если отображать их только до первого знака, типа 500,4 и 500,4?


Reindeer Moss Eater   (2008-05-28 16:50:00) [45]

Так вот они не равны, а отображаются одинаково, например 500,4

Верно. Они не равны.

а отображаются одинаково
И чего?


Reindeer Moss Eater   (2008-05-28 16:49:00) [46]

дабл прецижен испокон аеков был плавающей точкой. и таким и остается


grav   (2008-05-28 16:47:00) [47]


> Reindeer Moss Eater ©   (28.05.08 16:38) [4]

У меня не просто поля сравниваются. Сравниваются суммы полей с одним значением. Это контроль на правильность введенных данных.
Т.е. площадь по предприятию должна быть равна сумме площадей зданий.
Так вот они не равны, а отображаются одинаково, например 500,4


Prohodil Mimo   (2008-05-28 16:45:00) [48]

grav   (28.05.08 16:11)
а ты уверен, что поле именно DOUBLE PRECISION, а не Number или что-то подобное?
Я когда на IB переходил, со всеми типами такое было, но не с DOUBLE PRECISION. Если задал ему 0.4, то в базе и будет 0.4, даже при сравнении и в ХП и в SQL.
А вообще, на ibase.ru есть статья по этим типам.


Reindeer Moss Eater   (2008-05-28 16:38:00) [49]

Если бы они были, сравнение возвращало бы True


grav   (2008-05-28 16:36:00) [50]


> Reindeer Moss Eater ©   (28.05.08 16:26) [2]
> Сам спросил, сам ответил.
> Оказалось, что нет в таблице в базе двух одинаковых значений.
>

А они есть :(
Могло это быть из-за того, что данные из DBEdit вставлялись в таблицу как
ParamByName().AsString (думал IBX Сам размерется с типом данных), а не ParamByName().AsFloat?


Reindeer Moss Eater   (2008-05-28 16:26:00) [51]

все так


Reindeer Moss Eater   (2008-05-28 16:26:00) [52]

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


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

Наверх

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