![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сравнение полей DOUBLE PRECISION в запросе [D7, FireBird 1.5]
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]Сам спросил, сам ответил.
Оказалось, что нет в таблице в базе двух одинаковых значений.