Округление значения

Функция

Округление значения с заданной точностью.

Спецификация
 
< синтаксис >::=
< точность >::=
целочисленное значение | элемент формата «дата-время»
< элемент формата «дата-время» >::=
{'Y'|'Q'|'M'|'D'|'DY'|'DAY'|'HH'|'HH12'|'HH24'|'MI'}
Синтаксические правила
  1. < Выражение типа «дата-время» > должно иметь тип DATE.

  2. < Точность > задает точность округления целочисленного значения:

    • при положительном значении – точность округления после десятичной точки (количество цифр после десятичной точки). Для целочисленных значений не используется;

    • при отрицательном значении – точность округления перед десятичной точкой, т.е. при «-1» – до ближайшего целого десятка («-2» – до сотни, «-3» тысячи и т.д.).

    Примечание

    При округлении до значения 1e-13 числа считаются равными.

  3. < Элемент формата «дата-время» > задает точность округления значения типа «дата-время» (до какого элемента даты-времени должно выполняться округление).

  4. Округление по году и месяцу имеет свою специфику, например,

    select ROUND( sysdate, 'Y' );

    возвращает вместе с годом и начальные день и месяц этого года:

    |01.01.2005:00:00:00.00|

    Для исключения начальных месяца и дня из «округляемого» года необходимо использовать конструкцию:

    select to_char( ROUND( sysdate, 'Y' ), 'YYYY');

    Аналогично для «округляемого» месяца:

    select to_char( ROUND( sysdate, 'M' ), 'MM.YYYY');
  5. Все позиции (после запятой), требуемые к заполнению символьным форматом второго аргумента и выходящие за пределы вычисленной точности, заполняются символом '0'.

Возвращаемое значение
  1. < Выражение >, округленное до заданной точности.

  2. Если < числовое выражение > не может быть округлено с заданной точностью перед десятичной точкой, то возвращается ноль (например, задано округление 45.67 до тысяч – round(45.67,-3)).

  3. Тип возвращаемого результата: для < числового выражения > DOUBLE, для < выражение типа «дата-время» > DATE.

  4. Результат при указании < элемента формата «дата-время» > 'D' зависит от наличия ключа /COMPATIBILITY=ORACLE в команде запуска ядра СУБД:

    • значение DATE, округленное до текущего дня, если ключ не задан;

    • значение DATE, округленное до ближайшего дня начала недели, если ключ задан.

  5. Результат при указании < элемента формата «дата-время» > 'DY' или 'DAY' будет округлен до ближайшего дня начала недели.

  6. Если аргумент NULL, результат NULL.

Примеры
          select round(453.9847,0), 
       round(453.9847,2), 
       round(453.9847,7),
       round(-453.9847,3);
|454 |453.98 |453.9847 |-453.985 |
select round(453.9847,-1),
       round(453.9847,-2),
       round(453.9847,-3),
       round(456.9847,-1),
       round(-456.9847,-1);
|450 |500 |0 |460 |-460 |
select sysdate, round(sysdate, 'hh');
|29.08.2005:11:17:43.00|29.08.2005:11:00:00.00|
select sysdate, round(sysdate, 'mi');
|29.08.2005:11:17:43.00|29.08.2005:11:18:00.00|
select sysdate, round(sysdate, 'd');
|29.08.2005:11:17:43.00|29.08.2005:00:00:00.00|
select sysdate, round(sysdate, 'm');
|29.08.2005:11:17:43.00|01.09.2005:00:00:00.00|
select sysdate, round(sysdate, 'y');
|29.08.2005:11:17:43.00|01.01.2006:00:00:00.00|