2014-01-12 5 views
8

Я прочитал все функции округления T-SQL как Round, Floor и Ceil, но ни один из них не имеет округленных десятичных чисел для меня.Округление десятичных чисел в SQL Server 2008

У меня 2 вопроса:

  1. Как округлить десятичное число (3.69 ==>3.5)?
  2. Как округлить последние 3 цифры целого числа (например, 142600 ==>143000)?
+0

Вы должны написать udf. –

ответ

6

1)select CAST(FLOOR(2 * 3.69)/2 AS decimal(2, 1)) обрабатывает первый случай - любезность answer to a similar question on SQL Server Forums, который я адаптированной и быстро проверил.

Обратите внимание, что если числа вы округление до ближайшего 0.5 может быть больше (например, 333.69 =>333.5), не забудьте указать больше decimal точность при разыгрывании (например select CAST(FLOOR(2 * 3.69)/2 AS decimal(10, 1))), или вы можете получить ошибку переполнения:

Msg 8115, Level 16, State 8, Line 1 
Arithmetic overflow error converting numeric to data type numeric. 

Дополнительное точность не будет влиять на результат нижней строки (т.е. select CAST(FLOOR(2 * 3.69)/2 AS decimal(10, 1)) и select CAST(FLOOR(2 * 3.69)/2 AS decimal(2, 1)) оба дают 3.5); но это расточительно, если числа, которые вы округляете, всегда будут меньше.

Онлайн-ссылки с примерами доступны для T-SQL FLOOR, CAST и decimal, чтобы помочь.

2)select ROUND(142600, -3) обращается ко второму корпусу.

Аналогичная онлайн-ссылка доступна для T-SQL ROUND.

+1

Спасибо J0e3gan.It работает правильно! –

1

В соответствии с @ anwser J0e3gan «с, Sql Server's Round позволяет округлением до ближайших 10 полномочий с использованием параметра length, где длина 10^(-length), например,

length = 0 : 10^0 = nearest 1 
length = 3 : 10^-3 = nearest .001 
length = -3 : 10^3 = nearest 1000 

т.д.

Однако, в общем, с помощью простого 1-функции на основе округления - например, (Sql Круглый с длиной = 0) для округления до произвольного значения «ближайшего N» - с формулой:

round(X/N) * N 

например, ближайшие 100

select round(12345/100.0, 0) * 100.0 -- 12300 
select round(-9876/100.0, 0) * 100.0 -- -9900 
select round(-9849/100.0, 0) * 100.0 -- -9800 

... Ближайшие 0,5

select round(5.123/0.5, 0) * 0.5 -- 5.000 
select round(6.499/0.5, 0) * 0.5 -- 6.500 
select round(-4.499/0.5, 0) * 0.5 -- -4.50 

... Ближайший 0,02

select round(5.123/.02, 0) * .02 -- 5.12 
select round(-9.871/.02, 0) * .02 -- -9.88 

и т.д.

Помните, что тип, используемый для делителей должны быть числовыми/десятичной или плавающей.

+0

Спасибо за ваш ответ. Все коды верны –

0

Функция Oracle/PLSQL FLOOR возвращает наибольшее целочисленное значение, которое равно или меньше числа. например:

FLOOR(7.9) 
Result: 7 

FLOOR(30.29) 
Result: 30 

FLOOR(-7.9) 
Result: -8 
Смежные вопросы