Oracle Ceil для десятичных чисел - PullRequest
4 голосов
/ 10 сентября 2010

При округлении до 2 десятичных знаков значение 4.01132141 будет округлено до 4,02, поскольку оно превышает 4,01.

Как вы можете сделать это в PL / SQL?

Ответы [ 5 ]

4 голосов
/ 10 сентября 2010

Функция округления в большую сторону - CEIL , но она генерирует целое число.

Функция округления в меньшую сторону - FLOOR , но это тожегенерирует целое число.

Функция 'округлить до ближайшего' равна ROUND , и она позволяет вам указать количество десятичных знаков (dp).

Обратите внимание, что CEILокругляет до целого числа;чтобы округлить до 2 dp, вам нужно умножить на 100, использовать CEIL и разделить на 100.


Чтобы получить разумный ответ, используйте:

ROUND(value+0.005, 2)

Это работает, потому что для данных примера 4.01132141 значение, передаваемое в ROUND, равно 4.01632, а при округлении до 2 dp оно становится 4.02.Если бы значение началось, скажем, с 4.0593, то значение, передаваемое в ROUND, было бы 4.0643, которое при округлении до 2 дп становится 4.06, как требуется.

Здесь есть пара хитрых битов:

  1. Если число dp меняется, добавляемое значение (в примере 0,005) меняется.Вы можете создать таблицу для хранения количества десятичных знаков в одном столбце и значения округления для добавления в другом.Кроме того, вы можете использовать выражение со степенями 10 и т. Д.
  2. Выбор правильного поведения для отрицательных чисел.-4.01132141 становится -4.02 или -4.01?Возможно, вам придется поиграть с функциями SIGN и ABS, чтобы заставить его работать так, как вы хотите.
4 голосов
/ 10 сентября 2010

Одним из способов было бы сделать ceil(value*100)/100, но это кажется не элегантным. Не уверен, что есть способ заставить round вести себя так, как вы хотите.

1 голос
/ 23 января 2012

Я столкнулся с той же проблемой и выдвинул следующее утверждение, пока оно работает нормально.

select 4.01132141+(mod((ceil(4.01132141)-4.01132141)*1000,10)/1000) from dual
0 голосов
/ 04 ноября 2016

Вы можете использовать это для округления в PLSQL: КРУГЛЫЙ (UrNo + (5 / МОЩНОСТЬ (10, десятичные знаки + 1)), десятичные знаки)

0 голосов
/ 16 сентября 2015

выберите 4.01132141, CEIL (4.01132141 * 100) / 100 из двойного

...