使用十进制类型防止SQL中的舍入

时间:2015-01-25 20:35:23

标签: sql sql-server

我正在进行一项练习,要求我在另一个程序中调用存储过程。被调用的过程只是将两个数字分开,但结果似乎是向上舍入的。

在练习中,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

任何帮助都会受到赞赏,我真的不明白为什么十进制值会在第一时间出现,所以这可能是我最终的问题。

1 个答案:

答案 0 :(得分:7)

decimal的默认比例为零,这意味着您所拥有的实际上是整数类型。因此,如果不更改数据类型,则无法返回值0.5

如果为类型指定精度和比例,例如decimal(18,2),它可以处理非整数的数字。比例是小数点分隔符后将存储的位数。


根据您的需要,您还可以考虑float and real浮点数据类型。