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