trunc
Содержание
TRUNC()
Версии сервера
0.9 | 1.0 | 1.5.3 | 1.5.4 | 1.5.5 | 2.0 | 2.1 | 2.5 | 3.0 | |
---|---|---|---|---|---|---|---|---|---|
Как UDF | Да | Да | Да | Да | Да | Да | - | - | - |
Как встроенная функция | - | - | - | - | - | - | Да | Да | Да |
Доступно в
Формат
TRUNC( < аргумент > , < знаков > )
Аргумент | Описание |
---|---|
< аргумент > | Числовое выражение |
< знаков > | INTEGER |
Возвращает | INTEGER, BIGINT или DOUBLE |
Описание
Функция TRUNC() возвращает результат округления числа < аргумент > до < знаков > знаков после запятой в меньшую по модулю сторону. Если число < знаков > отрицательное, то округление идет до < знаков > знаков перед запятой.
Чтобы пользоваться этой функцией в Firebird версии младше 2.1, её небходимо подключить к базе данных как UDF.
Объявление
1. В Firebird версии младше 2.1 функция объявляется как UDF в внешнем модуле «fbudf».
DECLARE EXTERNAL FUNCTION TRUNC INTEGER BY DESCRIPTOR, INTEGER BY DESCRIPTOR RETURNS PARAMETER 2 ENTRY_POINT 'fbtruncate' MODULE_NAME 'fbudf';
2. В Firebird версии 2.1 и старше является встроенной функцией при соглашении объявления ее как:
DECLARE EXTERNAL FUNCTION TRUNC INTEGER BY DESCRIPTOR, INTEGER BY DESCRIPTOR RETURNS PARAMETER 2 ENTRY_POINT 'fbtruncate' MODULE_NAME 'SYSTEM';
Пример
SELECT TRUNC(1111.23456, 2), TRUNC(1.23456, 0), TRUNC(1111.23456, -2) FROM RDB$DATABASE
См. также
Источник
langref.pdf
trunc.txt · Последнее изменение: 2018/03/21 14:44 — 85.140.93.58
Обсуждение
TRUNC как встроенная функция появилась в 2.1, до этого только UDF. P.S. так же стоит посмотреть на предмет подобной ошибки в описании многих других функции (ABS, ATAN, EXP и многие другие введённые в 2.1)
чего писать-то было? это ж вики - взял да исправил. вот как я ;)
Доброго времени суток!
Не могу понять фразу:
Зачем объявлять встроенные функции? – С уважением, Евгений
Смысл фразы в том, что функция, как таковая, - нигде не объявлена, но мы можем ею пользоваться, условно считая, что ее объявили таким образом.
Это тоже самое, как в документации к Borland/Inprise/Borland/CodeGear/Embarcadero компиляторам. Есть базовые функции, которые линкуются компилятором каждый раз к создаваемому exe-файлу и которыми можно пользоваться. Они нигде не объявлены и их реализация является частью ядра dcc32.exe, но мы условно считаем, что существует некий модуль «System.pas» в котором объявлена функция, например, «function Copy(s :string; index, count : Integer):string;» и мы можем ею пользоваться будто бы она объявлена таким образом.
а для чего введена функа trunc()? есть же ведь round()
Тип параметров и возвращаемого результата - не INTEGER. На сколько я понимаю - любой тип который может быть приведен к числовому. Такая же ошибка в описании функции ROUND().