Главная страница
    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.034 c
1-1078484538
Bill Gates
2004-03-05 14:02
2004.03.28
Перезват вывода программы


3-1077723225
Domkrat
2004-02-25 18:33
2004.03.28
Работа с *.DBF


1-1078405248
Silver_
2004-03-04 16:00
2004.03.28
В OnCreate Формы требуется Application.Terminate но...


1-1078409816
t_vic
2004-03-04 17:16
2004.03.28
Ошибка при выполнении программы


1-1078232789
YuRock
2004-03-02 16:06
2004.03.28
Использование компонента TUpDown





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