Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.048 c
7-1072748121
Equilebriya
2003-12-30 04:35
2004.03.28
Com порт


4-1074492106
DeScriptor
2004-01-19 09:01
2004.03.28
Как добыть текст из окна типа MessageBox?


8-1069498012
BrainStorm
2003-11-22 13:46
2004.03.28
Как задать разрешение рисунка (dpi)?


1-1078391709
sergej
2004-03-04 12:15
2004.03.28
Fast report


1-1078647630
bjohny
2004-03-07 11:20
2004.03.28
Утечка памяти





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