Главная страница
    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.045 c
2-1157539322
Serjio77
2006-09-06 14:42
2006.09.24
Поиск и замена символа в строке содержащей n символов


1-1154854591
Glu
2006-08-06 12:56
2006.09.24
Пункт всплывающего меню


2-1157189467
nikv
2006-09-02 13:31
2006.09.24
Текущая директория


2-1157619572
Виталька 2006
2006-09-07 12:59
2006.09.24
Две формы одного класса


15-1156343106
TUser
2006-08-23 18:25
2006.09.24
Каковы причины Первой Мировой Войны?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский