首页 > 解决方案 > Got integer result when printed return numeric

问题描述

Not quite understood why I got @res = 1 when print return 0.57? I need to return the numeric results in my UDF function.

DECLARE @text1 VARCHAR(255) = 'some text'
DECLARE @text2 VARCHAR(255) = 'same another text'
DECLARE @res AS NUMERIC
DECLARE @i INT = 0
DECLARE @exist_counter INT = 0

WHILE @i < (LEN(@text1) - 2)
BEGIN
    SET @i = @i + 1

    IF CHARINDEX(SUBSTRING(@text1, @i, 3), @text2) > 0
    BEGIN
        SET @exist_counter = @exist_counter + 1
            --print @exist_counter
            --print SUBSTRING(@text1,@i,3)
    END
END

PRINT @i
PRINT @exist_counter
PRINT cast(@exist_counter AS NUMERIC) / cast(nullif(@i, 0) AS NUMERIC)

SET @res = cast(@exist_counter AS NUMERIC) / cast(nullif(@i, 0) AS NUMERIC)

PRINT @res

标签: sqlsql-servertsql

解决方案


这个帖子

具有固定精度和比例的数值数据类型

所以你应该改变比例

declare @res as numeric(18, 2)

为什么?

正如@HABO 的评论,“默认精度为18。 ”和“默认比例为 0 ”,其中比例为“存储在小数点右侧的小数位数。


推荐阅读