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

Вниз

Ув. мастера, как в 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.029 c
14-1077729489
Натуся
2004-02-25 20:18
2004.03.28
Бесплатный хостинг с PHP


14-1077969040
Типа... Ламер и всё такое..
2004-02-28 14:50
2004.03.28
WinXP


9-1062847814
Gag
2003-09-06 15:30
2004.03.28
Как в вин98 убрать рамку и заголовок у окна


1-1078413592
Demon_mhm
2004-03-04 18:19
2004.03.28
Конструктор объекта и выделение памяти.


1-1078579065
mur
2004-03-06 16:17
2004.03.28
работа с динамическими переменными