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

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

Неправильно рассчитываюся выражения в SQL


Delphi basic ©   (2006-09-01 10:29:00) 

В Firebird выполняю следующий запрос:

select (ts.moto_hour * c.fuel_norm_moto), c.fuel_norm_moto, ts.moto_hour
 from travel_sheet ts, car c, subdivision s
 where ts.car = c.ui and
   ts.subdivision = s.ui and
   extract(month from ts.work_date) = 7 and
   extract(year from ts.work_date) = 2006 and
   s.code = 'СМИТ' and
   ts.state = 1

результаты:

150 20 7,5
75 20 3,8
60 6 6
60 20 3

почему выражение (1-й столбец) неправильно считается?
Чего-то я не понимаю :(


Delphi basic   (2006-09-01 11:36:00) [1]

Вот так считает правильно:

select (cast(ts.moto_hour as numeric(10, 1)) * cast(c.fuel_norm_moto as numeric(10, 1))), c.fuel_norm_moto, ts.moto_hour,
ts.UI, ts.car
 from travel_sheet ts, car c, subdivision s
 where ts.car = c.ui and
   ts.subdivision = s.ui and
   extract(month from ts.work_date) = 7 and
   extract(year from ts.work_date) = 2006 and
   s.code = 'СМИТ' and
   ts.state = 1

Это что ж, получается, придется обязательно к одному типу приводить, чтобы получить корректный результат?


Delphi basic   (2006-09-01 11:28:00) [2]

Угу, у меня вот ощущение, что калькулятор взбесился...
Пойду сервак рестартну, пока юзеры обедают... на всякий случай...


Ega23   (2006-09-01 11:26:00) [3]

Да вроде должно нормально перемножить....
Очень странно...


Delphi basic   (2006-09-01 11:24:00) [4]

Сорри, больше не буду :)


Desdechado   (2006-09-01 11:23:00) [5]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1157093965&n=1

ЗЫ это неуважение - часть данных кидать в одну ветку, часть - в другую


Delphi basic   (2006-09-01 11:20:00) [6]

В конференции БАЗЫ ветка с тем же названием - там привел


Ega23   (2006-09-01 11:19:00) [7]

Да, третья - очень странно...


Desdechado   (2006-09-01 11:14:00) [8]

Вторая строка легко объяснима - потеря точности при расчетах и хранении данных в полях с плавающей точкой. Типы полей приведи.
Третья - странно.


Delphi basic   (2006-09-01 10:37:00) [9]

Поправлю результаты для большей удобочитаемости:

150   20   7,5
75    20   3,8
60      6     6
60    20     3

Почему первый столбец не всегда равен произведению второго и третьего?
Например здесь это справедливо для 2 и 3 строк


Delphi basic   (2006-09-01 10:34:00) [10]

Почему же здесь неправильно считает?


Ega23   (2006-09-01 10:32:00) [11]

Такие вещи обычно реализуются добавлением калькулируемого поля в TDataSet на клиенте.


Наверх

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