2015-06-09 3 views
0

У меня проблема, я не могу исправить ошибку со скалярнозначной функцией. У меня есть следующая функция:Как округлить медианное значение

(@list varchar(max)) 
returns float 
as 
begin 

    declare @Median float 
    select @Median = (
    convert(float,(SELECT MAX(value) FROM 
    (SELECT TOP 50 PERCENT value from split(@list,',') order by value) BottomHalf)) 
    + 
    convert(float,(SELECT MIN(value) FROM 
    (SELECT TOP 50 PERCENT value from split(@list,',') order by value DESC) TopHalf)) 
    )/2 
    option (maxrecursion 0) 

    return (ROUND (@Median ,2)) 

end 

В ответ я получаю, например: 1,155. Когда я добавляю возврат (ROUND (1.155 ,2)) Я получаю 1.15, но мне нужно 1.16. Я стараюсь добавить ROUND(CAST (1.155 AS float),2), но это мне не помогло

+0

Чтобы быть понятным, этот 'select ROUND (1.155,2)' дает вам '1.15'? снова проверьте –

+0

Да, в результате у меня есть 1.15, но мне нужно 1.166 – Yura

+0

Можете ли вы попробовать это? 'select ROUND (1.155,2,0)' –

ответ

2

Предположительно, ваше возвращаемое значение больше похоже на 1.154999999. Это будет округлено. Если вам нужно еще получить 1,16, а затем попытаться объявить @median иметь три знака после запятой:

declare @median decimal(18, 3) 

я вопрос, является ли то, что вам действительно нужно. Но here - это скрипт SQL.

+0

Спасибо, ваш ответ мне помог. – Yura

Смежные вопросы