Форум: "Базы";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
ВнизУв. мастера, как в IB создать кальк. поле с отсечением дроб. част Найти похожие ветки
← →
SM (2004-02-24 16:43) [0]Ув. мастера, как в InterBase создать калькуляционное поле с отсечением дробной части или с округлением. То есть что-то вроде:
Field1:=Trunc(Field2/100);
илиField1:=Round(Field2/100);
← →
Johnmen © (2004-02-24 16:45) [1]CAST(MyFloatField AS INTEGER) AS NewIntegerField
← →
SM (2004-02-24 16:49) [2]
> Johnmen ©
Спасибо, это может быть выходом. Но придется добавлять еще одно поле. А возможно ли использовать округление (отсечение) как выражение кальк. поля?
← →
SM (2004-02-24 16:50) [3]... Например так:
Field1:=Trunc(Field2/100)*100;
← →
Johnmen © (2004-02-24 16:51) [4]>SM
Что ты понимаешь под кальк. полем ? В таблице ? В наборе данных ?
← →
SM (2004-02-24 17:03) [5]Именно в таблице на сервере. Не хочу распылять кучу программной логики на клиентское приложение. То есть я создаю в таблице кальк. поле:
DOUBLE PRECISION
COMPUTED BY ((Field1/100)*100)
А нужно вроде такого:
DOUBLE PRECISION
COMPUTED BY (ROUND(Field1/100)*100)
← →
Johnmen © (2004-02-24 17:08) [6]DOUBLE PRECISION
COMPUTED BY (CAST(Field1*100 AS INTEGER)/100)
Но думаю, что проблема надуманна...
← →
SM (2004-02-24 17:16) [7]Большое спасибо.
> Но думаю, что проблема надуманна...
Для кого как ... :)
← →
SM (2004-02-25 13:48) [8]
> DOUBLE PRECISION
> COMPUTED BY (CAST(Field1*100 AS INTEGER)/100)
Проблемка возникла. Результат получается только целый.
Если Field1 = 5.268, то результат получается 5.000 вместо 5.260
← →
Zacho © (2004-02-25 13:54) [9]Ну сделай так:
COMPUTED BY (CAST(CAST(Field1*100 AS INTEGER)/100 AS DOUBLE PRECISION))
← →
Anatoly Podgoretsky © (2004-02-25 13:58) [10]А в вопросе "поле с отсечением дробной части", но с учетом коррекции ответ выше. Ты поосторожнее с заданием вопросов, ставь их точно.
← →
SM (2004-02-25 14:08) [11]
> DOUBLE PRECISION
> COMPUTED BY (CAST(Field1*100 AS INTEGER)/100)
Проблемка возникла. Например, если Field1=5.5747, то результат поля равен 5, а не 5.57, как ожидалось.
Пробовал явно указать тип поля:ALTER TABLE SCH_ITEMS
ADD "Res" DOUBLE PRECISION COMPUTED BY ((CAST(Field1*100 AS INTEGER)/100))
Тогда все равно результат равен 5.000
Что не так?
← →
Johnmen © (2004-02-25 14:13) [12]1. Zacho © (25.02.04 13:54) [9]
2. Может быть подойти к этому по-другому ? Напр., не писать в поле неокругленные данные.
← →
SM (2004-02-25 14:19) [13]
> COMPUTED BY (CAST(CAST(Field1*100 AS INTEGER)/100 AS DOUBLE
> PRECISION))
Тоже самое 5.000
← →
Johnmen © (2004-02-25 14:22) [14]
COMPUTED BY (CAST(CAST(Field1*100 AS INTEGER) AS DOUBLE PRECISION)/100))
← →
SM (2004-02-25 14:23) [15]
> COMPUTED BY (CAST(CAST(Field1*100 AS INTEGER)/100 AS DOUBLE
> PRECISION))
Тоже самое 5.000
← →
SM (2004-02-25 14:24) [16]
> COMPUTED BY (CAST(CAST(Field1*100 AS INTEGER)/100 AS DOUBLE
> PRECISION))
Тоже самое 5.000
← →
SM (2004-02-25 14:26) [17]
> COMPUTED BY (CAST(CAST(Field1*100 AS INTEGER)/100 AS DOUBLE
> PRECISION))
Тоже самое 5.000
← →
Zacho © (2004-02-25 14:27) [18]Тогда так:
COMPUTED BY (CAST(CAST(CAST(Field1*100 AS INTEGER) AS DOUBLE PRECISION)/100) AS DOUBLE PRECISION))
Или так:
COMPUTED BY (CAST(Field1 AS NUMERIC (15,2)))
← →
SM (2004-02-25 14:34) [19]
> COMPUTED BY (CAST(CAST(CAST(Field1*100 AS INTEGER) AS DOUBLE
> PRECISION)/100) AS DOUBLE PRECISION))
Ругается на деление
> COMPUTED BY (CAST(Field1 AS NUMERIC (15,2)))
А вот это заработало! Спасибо большое.
← →
Johnmen © (2004-02-25 14:36) [20]>Zacho © (25.02.04 14:27) [18]
>COMPUTED BY (CAST(Field1 AS NUMERIC (15,2)))
Всё равно в выч.поле будет Field1
:)
← →
Johnmen © (2004-02-25 14:36) [21]>SM (25.02.04 14:34) [19]
Самообман...
← →
stud © (2004-02-25 14:41) [22]а что в результате-то должно получиться????
← →
Johnmen © (2004-02-25 14:42) [23]>SM (25.02.04 14:34) [19]
> COMPUTED BY (CAST(CAST(CAST(Field1*100 AS INTEGER) AS DOUBLE
> PRECISION)/100) AS DOUBLE PRECISION))
>Ругается на деление
Повнимательней со скобками...
← →
SM (2004-02-26 16:41) [24]
COMPUTED BY (CAST(CAST(Field1*100 AS INTEGER)/100.000000001 AS DOUBLE PRECISION))
Вот так у меня все вышло
← →
Johnmen © (2004-02-26 16:46) [25]А так нет ?
COMPUTED BY (CAST(Field1*100 AS INTEGER)/100.0))
или такCOMPUTED BY (CAST(CAST(Field1*100 AS INTEGER) AS DOUBLE PRECISION)/100)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.034 c