Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.17;
Скачать: CL | DM;

Вниз

Округление в 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
14-54855
iNew
2003-04-01 05:25
2003.04.17
Никто не знает где можно найти карты городов европы


8-54759
lamerzzzzzz
2003-01-18 12:52
2003.04.17
МУЛЬТИМЕДИА


3-54492
jackie
2003-03-27 09:35
2003.04.17
foxPro


11-54545
stupid
2002-06-28 16:55
2003.04.17
Delphi форма + MCK ?


7-54910
Z_man7777
2003-02-26 12:42
2003.04.17
Как отловить раскладку клавиатуры