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

use*_*169 3 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
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激,我真的不明白为什么十进制值首先是圆的,所以这可能是我的问题.

Guf*_*ffa 7

a的默认比例decimal为零,这意味着你拥有的实际上是一个整数类型.因此,在0.5不更改数据类型的情况下无法返回值.

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


根据您的需求,您也可以考虑floatreal浮点数据类型.