当您将两个整数相除时,SQL Server 将始终给出整数结果。
您可以在实际硬编码值的末尾添加“.0”,或乘以“1.0”来转换字段值。如果要四舍五入,那么我知道的最好方法是加 0.5,然后调用普通的 ROUND 函数。之所以可行,是因为 ROUND_DOWN(number + .5) 始终与 ROUND_UP(number) 相同。
正如其他人指出的那样,您还可以手动将字段转换为浮点数。
但请注意
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
GO
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