![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Абсолютное значение (модуль) поля
Juice © (2006-03-14 19:40:00)Какая функция используется в Interbase/Firebird чтобы получить абсолютное значение (модуль) поля ?
Johnmen (2006-03-16 09:43:00) [1]Вот мне и было интересно, зачем ты пустые сообщения постишь...
Виталий Панасенко (2006-03-16 09:24:00) [2]Уже не интересно.Спор пустой.Да и спать охота.
Johnmen (2006-03-16 09:01:00) [3]А есть сомневающиеся?
Виталий Панасенко (2006-03-16 08:59:00) [4]Что 0*Число все равно 0. Больше ничего.
Johnmen (2006-03-15 18:33:00) [5]>Виталий Панасенко (15.03.06 17:50) [22]
Что ты хотел сказать постом [22] ?
Johnmen (2006-03-15 18:14:00) [6]>sniknik © (15.03.06 18:01) [24]
Да, это для IB/FB с его особенностями округления при CAST'е.
Виталий Панасенко (2006-03-15 18:08:00) [7]
> Виталий Панасенко (15.03.06 17:50) [22]
(или F*0, если F=0. хотя это уже не важно, т.к. F=0)
sniknik (2006-03-15 18:01:00) [8]> Можешь же сам тестануть...
в mssql не получится (округление при cast "неправильное") надо заменить на
SELECT
F * ROUND(ROUND(ROUND(F + 0.5, 0) - 0.5, 0) - (ROUND(F - 0.5, 0)) - 0.5, 0)
Johnmen (2006-03-15 17:59:00) [9]Ну если тебе проще на пальцах просчитать, то ты заметишь, что получаются варианты
-F*-1
F*1
0*2
:)
Виталий Панасенко (2006-03-15 17:50:00) [10]Зачем тестить ? Математику на отменяли еще: чтобы ты там не навоял, в результате упрощения ДОЛЖНО получиться выражение вида:
-F*-1 или F*1 (или F*0, если F=0. хотя это уже не важно, т.к. F=0) И НИЧЕГО ДРУГОГО..:-))
Johnmen (2006-03-15 17:46:00) [11]Да, в примере [15] F умножается не на sign, но в результате умножения получается abs.
Там же всё элементарно :) Можешь же сам тестануть...
Виталий Панасенко (2006-03-15 17:39:00) [12]
> Johnmen © (15.03.06 17:01) [19]
> Нет.
> К сожалению, sign таким приёмом можно получить только для
> целочисленных типов.
Но если ты таким образом получашь что-то отличное от модуля 1, то F*на это что-то уже далеко не модуль F ...
Johnmen (2006-03-15 17:01:00) [13]Нет.
К сожалению, sign таким приёмом можно получить только для целочисленных типов.
Виталий Панасенко (2006-03-15 16:27:00) [14]Красиво. Это ты так -1 или 1 получаешь ? т.е. функция Sign ?
Johnmen (2006-03-15 15:20:00) [15]Сам...
atruhin (2006-03-15 15:15:00) [16]Нда. Работает. Ни за что бы не додумался. Сам изобрел?
Johnmen (2006-03-15 15:02:00) [17]>atruhin © (15.03.06 14:35) [14]
Сдаюсь :)
SELECT
F * CAST(CAST(CAST(F + 0.5 AS INTEGER) - 0.5 AS INTEGER) - (CAST(F - 0.5 AS INTEGER)) - 0.5 AS INTEGER)
atruhin (2006-03-15 14:35:00) [18]>>[12] Johnmen © (15.03.06 10:54)
Ну уж сдавайтесь :). Ни чего не получается, а очень интересно!
Виталий Панасенко (2006-03-15 12:51:00) [19]
> Johnmen © (15.03.06 10:54) [12]
> Одним "простым" запросом. Используется CAST. Это подсказка.
> Предлагаю подумать, ведь это интересно...:)
Интересно, зачем тогда UDF поставляют ?.:-))
Johnmen (2006-03-15 10:54:00) [20]Одним "простым" запросом. Используется CAST. Это подсказка. Предлагаю подумать, ведь это интересно...:)