Главная страница
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://predskazanie-wunschpunsch.ru/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.049 c
1-1155547369
DelphiLexx
2006-08-14 13:22
2006.09.24
Сменить вид курсора контрола в его MouseDown е


4-1148375787
Stanislav
2006-05-23 13:16
2006.09.24
Запуск приложения от имени Администратора


15-1157272702
Проггер из библиотеки
2006-09-03 12:38
2006.09.24
Глюки в программах


15-1157184459
X9
2006-09-02 12:07
2006.09.24
Распределение Интернет на несколько компьютеров.


2-1157627610
lessard
2006-09-07 15:13
2006.09.24
Определить содержимое variant