Пользовательская функция Binning не возвращает тип данных Float - PullRequest
0 голосов
/ 18 апреля 2019

Я создал пользовательскую функцию, которая объединяет данные в зависимости от выбранного минимума, максимума и размера ячейки.

Он работает так, как предназначено для целых чисел, однако при использовании чисел с плавающей точкой, представляющих проценты, он не будет возвращать число в виде числа с плавающей запятой и, следовательно, не будет правильно складывать число.

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.

Я новичок в пользовательских функциях, у кого-нибудь есть советы?

...