SQL Server всегда будет давать целочисленный результат, когда вы делите два целых числа.
Вы можете добавить «.0» в конец настоящих жестко заданных значений или умножить на «1.0», чтобы преобразовать значение поля. Если вы хотите округлить, то лучшим способом, который я знаю, является добавление 0,5, а затем вызов нормальной функции ROUND. Это работает, потому что ROUND_DOWN (число + .5) всегда совпадает с ROUND_UP (число).
Вы также можете вручную направить поле на поплавок, как указали другие.
Но обратите внимание, что
round(1.0/2.0,0)
возвращает с плавающей точкой результат, в то время как
round(cast(1 as float)/cast(2 as float),0)
будет давать целое число результат. Поэтому используйте тот, который лучше всего подходит для вас.
Все это показано в примере ниже:
SELECT
ROUND(5/2,0) AS INTEGER_EXAMPLE
,ROUND((5.0/2.0),0) AS FLOATING_POINT_EXAMPLE
,ROUND(CAST(5 AS FLOAT)/CAST(2 AS FLOAT),0) AS CASTING_EXAMPLE
,ROUND((5 * 1.0)/(2 * 1.0),0) AS CONVERTED_TO_FP_EXAMPLE
,ROUND(((1 * 1.0)/(4 * 1.0)) + (1.0/2.0),0) AS ROUNDED_UP_EXAMPLE
Вот функция, которая будет делать облавы для вас, вместе с SELECT, чтобы показать вам результаты, которые она дает.
create function roundup(@n float) returns float
as
begin
--Special case: if they give a whole number, just return it
if @n = ROUND(@n,0)
return @n;
--otherwise, add half and then round it down
declare @result float = @n;
declare @half float = (1.0/2.0);
set @result = round(@n + @half,0);
return @result;
end
select
dbo.roundup(0.0) as example_0
,dbo.roundup(0.3) as example_pt_three
,dbo.roundup(0.5) as example_pt_five
,dbo.roundup(0.9) as example_pt_nine
Спасибо! отлично работал – Martin