Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.24;
Скачать: CL | DM;

Вниз

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

 
Delphi basic ©   (2006-09-01 10:29) [0]

В 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-й столбец) неправильно считается?
Чего-то я не понимаю :(


 
Ega23 ©   (2006-09-01 10:32) [1]

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


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

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


 
Delphi basic ©   (2006-09-01 10:37) [3]

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

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

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


 
Desdechado ©   (2006-09-01 11:14) [4]

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


 
Ega23 ©   (2006-09-01 11:19) [5]

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


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

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


 
Desdechado ©   (2006-09-01 11:23) [7]

http://delphimaster.net/view/3-1157093965/

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


 
Delphi basic ©   (2006-09-01 11:24) [8]

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


 
Ega23 ©   (2006-09-01 11:26) [9]

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


 
Delphi basic ©   (2006-09-01 11:28) [10]

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


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

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2006.09.24;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.05 c
2-1157463917
VEZ
2006-09-05 17:45
2006.09.24
Ссылка не обнуляется.


10-1123726974
kblc
2005-08-11 06:22
2006.09.24
Связь с объектом


15-1157526130
Задачник
2006-09-06 11:02
2006.09.24
Еще один баян.


15-1157104696
Tort
2006-09-01 13:58
2006.09.24
Всех мастеров с 1 сентября!!!!!


3-1153891644
Oalien
2006-07-26 09:27
2006.09.24
помагите help срочно