我想将余数和商的值分开。
例如
@Qty = 35
@OnHand = 2
@Size = 6
Print (@Qty + @OnHand) / @Size --(35+2)/6 I should get 6
Print (@Qty + @OnHand) % @Size --(35+2)%6 I should get 2
假设我的@size
和@OnHand
的分数是这样的:
@Qty = 35
@OnHand = 1.5
@Size = 2.5
Print (@Qty + @OnHand) / @Size --(35+1.5)/2.5 I should get 14
Print (@Qty + @OnHand) % @Size --(35+1.5)%2.5 I should get 1.5
但是当我尝试使用T-SQL时,它没有显示与上面相同的值:
CREATE PROC CalculateQty
@Qty DECIMAL
AS
BEGIN
DECLARE @OnHand AS DECIMAL
DECLARE @Size AS DECIMAL
SET @OnHand = 2
SET @Size = 6
PRINT (@Qty + @OnHand) / @Size // result: 6.1666666666666
END
EXEC CalculateQty @Qty=35
同时@Size = 2.5
会四舍五入并变为3。我认为这是由于变量数据类型decimal
导致的,而且我无法声明float,因为使用变量时会引发错误用% modulo
答案 0 :(得分:0)
如The Docs中的示例所示,除小数点后在SQL Server中获得商的方法是将操作作为整数进行CAST:
DECLARE @Qty decimal
DECLARE @OnHand AS DECIMAL
DECLARE @Size AS DECIMAL
SET @Qty = 35;
SET @OnHand = 2;
SET @Size = 6;
PRINT CAST((@Qty + @OnHand) / @Size AS Integer); --results in 6
也根据The Docs,十进制数据类型的默认小数位数为0,因此,如果在声明变量时未提供小数位数,则小数点右边将没有数字,并且1.5
将存储为2
。
如果为小数位数的Scale参数分配足够的值,您将获得期望的结果:
DECLARE @Qty decimal(10,2)
DECLARE @OnHand AS DECIMAL(10,2)
DECLARE @Size AS DECIMAL(10,2)
SET @Qty = 35;
SET @OnHand = 1.5;
SET @Size = 2.5;
PRINT CAST((@Qty + @OnHand) / @Size AS Integer); --results in 14
Print (@Qty + @OnHand) % @Size --results in 1.50