我正在进行一项练习,要求我在另一个程序中调用存储过程。被调用的过程只是将两个数字分开,但结果似乎是向上舍入的。
在练习中,5.0除以10.0,结果为1.结果显然应为0.5。目标是在不改变DECIMAL类型的情况下正确显示输出。
以下是代码:
GO
CREATE PROCEDURE uspDivide2Numbers
@decValue1 AS DECIMAL
,@decValue2 AS DECIMAL
,@decResult AS DECIMAL OUTPUT
AS
SET NOCOUNT ON
SELECT @decResult = @decValue1 / @decValue2
GO
CREATE PROCEDURE uspCallAnotherStoredProcedure
AS
SET NOCOUNT ON
DECLARE @decResult AS DECIMAL
EXECUTE uspDivide2Numbers 5.0, 10.0, @decResult OUTPUT
SELECT @decResult AS decResult
GO
uspCallAnotherStoredProcedure
任何帮助都会受到赞赏,我真的不明白为什么十进制值会在第一时间出现,所以这可能是我最终的问题。
答案 0 :(得分:7)
decimal
的默认比例为零,这意味着您所拥有的实际上是整数类型。因此,如果不更改数据类型,则无法返回值0.5
。
如果为类型指定精度和比例,例如decimal(18,2)
,它可以处理非整数的数字。比例是小数点分隔符后将存储的位数。
根据您的需要,您还可以考虑float
and real
浮点数据类型。