![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Округление в InterBase [D6, IB6.x]
ruslan_as © (2003-04-01 21:03:00)Выручайте -горю. Есть такой запрос
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 а остальные знаки отбрасывает.
Как регулировать степень точности работы?
ruslan_as (2003-04-02 10:24:00) [1]>>zacho Спасибо!!! Работает!!!
zacho (2003-04-02 10:21:00) [2]
> ruslan_as © (02.04.03 10:16)
Смотри в сторону NUMERIC и DECIMAL
ruslan_as (2003-04-02 10:16:00) [3]Беру строку
select aa.a, bb.b, cc.c, dd.d,cast(aa.a as double precision) as YYY
Результат поля YYY будет число с 3 знаками после запятой, а мне нужно еще и регулирать кол-во знаков.
zacho (2003-04-02 10:13:00) [4]Блин, по-нормальному стоило бы написать наоборот (precision,scale) :-)
zacho (2003-04-02 10:09:00) [5]Можешь сделать
cast(cast((aa.a*cc.c) as double precision) /cast((bb.b*dd.d) as double precision) as numeric(scale,precision))где scale - общее кол-во знаков в числе, precision - нужное тебе кол-во знаков после запятой.
ЮЮ (2003-04-02 09:51:00) [6]Попробуй преобразовать к double precision сомножители, а не результат
ruslan_as (2003-04-02 09:48:00) [7]Спасибо за помощь 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 знаков после запятой. Можно ли явно указать сколько знаков? (Да и в задаче пользователь будет сам определять точность поиска).
zacho (2003-04-02 09:36:00) [8]
> 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:15:00) [9]Извините за долгое молчание (был оторван от внешнего мира аж 8 часов).
Диалект у меня 3. a,b,c,d у меня varchar с масштабом 10. Но может быть и другой. В принципе у меня там целые числа. (Пробовал INTEGER - считает совсем без дробных).
Спасибо за совет по последнему пунту.
zacho (2003-04-01 21:23:00) [10]А какие типы у 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 ...