Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];

Вниз

Неправильно рассчитываюся выражения в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.048 c
2-1156783060
serko
2006-08-28 20:37
2006.09.24
Не добавляется запись в Firebird


6-1146908689
Officeman
2006-05-06 13:44
2006.09.24
NMFTP ListItem


15-1157116119
StriderMan
2006-09-01 17:08
2006.09.24
Run-time packages и DCU


2-1157419680
Ref
2006-09-05 05:28
2006.09.24
Excel


1-1155552420
Леонид Федьков
2006-08-14 14:47
2006.09.24
Программирование служб Windows на Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский