Sql 函数 - 忽略返回值中的小数位

Sql function - disregarding the decimal place in returning value

为什么sql查询在使用SUM函数时会忽略小数位? iv'e 使用 CONVERT 函数,但它没有 return 正确的值。

示例:

150.30 * 3 = 450.9

但是根据我函数的结果 return

150.30 * 3 = 451 小数点四舍五入。

我怎样才能得到准确的计算结果...?

这是我的 sql 函数查询

CREATE FUNCTION [dbo].[fnGetSubjectCost](@id INT)
RETURNS DECIMAL 
AS 
-- Returns the stock level for the product.
BEGIN
DECLARE @ret DECIMAL;

SELECT @ret = IIF([Name] = 'Tuition', CONVERT([DECIMAL](9,2),Cost) * CONVERT([DECIMAL](15,2),t1.SubjectUnit), CONVERT([DECIMAL](9,2),Cost))
    FROM [HCCDB].[dbo].[SubjectOfferedFee] AS t0
        INNER JOIN HCCDB.dbo.SubjectsOffered  AS t1
            ON t1.SubjectsOfferedID = t0.SubjectsOfferedID
            WHERE t0.SubjectOfferedFeeID = @id
IF (@ret IS NULL) 
SET @ret = 0;
RETURN CONVERT(DECIMAL(15,2), @ret);
END;

查询有效,但没有 return 确切值。它忽略小数位。

此函数的用途是添加列公式。

ALTER TABLE HCCDB.dbo.SubjectOfferedFee
ADD FinalCost AS CONVERT(DECIMAL(15,2), dbo.fnGetSubjectCost(CONVERT(INT, [SubjectOfferedFeeID])))

问题是 @ret 的声明。

在SQL服务器中,小数的默认小数位是0(见documentation)。所以,

declare @ret decimal;

相当于:

declare @ret decimal(18, 0);

只需明确精度和比例,例如:

declare @ret decimal(18, 2);