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

Вниз

Округление в InterBase   Найти похожие ветки 

 
ruslan_as   (2003-04-01 21:03) [0]

Выручайте -горю. Есть такой запрос
select aa.a, bb.b, cc.c, dd.d
from a aa, B bb, c cc, d dd
where (a*c)/(b*d)<0,75236

но считает он только до 0,75 а остальные знаки отбрасывает.
Как регулировать степень точности работы?


 
zacho   (2003-04-01 21:23) [1]

А какие типы у a,b,c,d ? Какой диалект ?
Может поможет приведение (a*c)/(b*d) к нужному типу ? Например, where cast( ((a*c)/(b*d)) as double precision). Или приведение a,b,c,d к нужному типу.
P.S. Использование в запросах из нескольких таблиц имен полей без алиасов таблиц - источник глюков. Так что пиши where (aa.a*cc.c ...


 
ruslan_as   (2003-04-02 09:15) [2]

Извините за долгое молчание (был оторван от внешнего мира аж 8 часов).
Диалект у меня 3. a,b,c,d у меня varchar с масштабом 10. Но может быть и другой. В принципе у меня там целые числа. (Пробовал INTEGER - считает совсем без дробных).

Спасибо за совет по последнему пунту.


 
zacho   (2003-04-02 09:36) [3]


> ruslan_as © (02.04.03 09:15)
> Но может быть и другой. В принципе у меня там целые числа.

А зачем хранить их в varchar ?

> (Пробовал INTEGER - считает совсем без дробных).

Попробуй снова :) c явным приведением типа.
Т.е. where cast((a*c) as double precision) /cast((b*d) as double precision) <0,75236


 
ruslan_as   (2003-04-02 09:48) [4]

Спасибо за помощь zacho! Прошу еще немного помощи:

Переделал:
select aa.a, bb.b, cc.c, dd.d,cast((aa.a*cc.c) as double precision) /cast((bb.b*dd.d) as double precision)
from a aa, B bb, c cc, d dd
where cast((aa.a*cc.c) as double precision) /cast((bb.b*dd.d) as double precision) <0.75236

Все равно считает до 3 знаков после запятой. Можно ли явно указать сколько знаков? (Да и в задаче пользователь будет сам определять точность поиска).


 
ЮЮ   (2003-04-02 09:51) [5]

Попробуй преобразовать к double precision сомножители, а не результат


 
zacho   (2003-04-02 10:09) [6]

Можешь сделать
cast(cast((aa.a*cc.c) as double precision) /cast((bb.b*dd.d) as double precision) as numeric(scale,precision)) где scale - общее кол-во знаков в числе, precision - нужное тебе кол-во знаков после запятой.


 
zacho   (2003-04-02 10:13) [7]

Блин, по-нормальному стоило бы написать наоборот (precision,scale) :-)


 
ruslan_as   (2003-04-02 10:16) [8]

Беру строку
select aa.a, bb.b, cc.c, dd.d,cast(aa.a as double precision) as YYY
Результат поля YYY будет число с 3 знаками после запятой, а мне нужно еще и регулирать кол-во знаков.


 
zacho   (2003-04-02 10:21) [9]


> ruslan_as © (02.04.03 10:16)

Смотри в сторону NUMERIC и DECIMAL


 
ruslan_as   (2003-04-02 10:24) [10]

>>zacho Спасибо!!! Работает!!!



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

Форум: "Базы";
Текущий архив: 2003.04.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
3-54435
GRR
2003-03-31 14:06
2003.04.17
Как изменить запись в наборе сформированном через IBQuery?


6-54777
Bosh
2003-02-21 04:36
2003.04.17
RAS


1-54744
Ольга
2003-04-03 20:14
2003.04.17
Работа с диаграммами


3-54462
anatolyk
2003-03-29 11:42
2003.04.17
ADOConnection.ConnectionString при переносе проги.


4-54953
children
2003-02-18 20:56
2003.04.17
командная строка





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