自定义合并功能不返回Float数据类型

时间:2019-04-18 11:33:02

标签: function tsql floating-point binning

我建立了一个自定义函数,可根据所选的最小,最大和容器大小对数据进行容器分类。

它按预期用于整数,但是当使用代表百分比的浮点数时,它不会将数字作为浮点数返回,因此不会正确地对数字进行分箱。

CREATE FUNCTION bucket (
   -- Add the parameters for the function here
   @min FLOAT
   ,@max FLOAT
   ,@size FLOAT
   ,@number FLOAT
)
RETURNS INT
AS
BEGIN
-- Declare the return variable here
DECLARE @Result FLOAT
DECLARE @bucket FLOAT= @size
DECLARE @found VARCHAR(15) = 'N'

-- Add the T-SQL statements to compute the return value here
WHILE @found = 'N'
BEGIN
    IF @number <= @min
    BEGIN
        SET @Result = @min
        SET @found = 'Y'
    END
    ELSE IF @number <= @bucket
    BEGIN
        SET @Result = @bucket
        SET @found = 'Y'
    END
    ELSE IF @number >= @max
    BEGIN
        SET @Result = @max
        SET @found = 'Y'
    END

    SET @bucket = @bucket + @size
END
-- Return the result of the function
RETURN @Result
END
GO

我确定可以改进函数的逻辑,但是我只是在寻找返回浮点数的方法,这样我就不必将其百分比乘以100即可。

这就是我所说的:

SELECT dbo.bucket(0.0,1.0,0.1,0.74)

返回1,但使用整数时:

SELECT dbo.bucket(0.0,100.0,10,74)

这正确返回80

我希望第一个调用返回0.8。

我是自定义功能的新手,有人有什么建议吗?

0 个答案:

没有答案