DECIMAL(精度,比例)以获得最大的计算精度

时间:2010-11-30 07:29:49

标签: sql tsql sql-server-2008

我将500/15分开,然后将结果乘以15,但在不同的精度和比例上得到不同的结果。

请运行以下脚本。

DECLARE @cost DECIMAL(36,4) 
SET @cost = 500
SELECT @cost/15, (@cost/15) * 15
-- Scale is 4 so on multlyping, after dividing, result is not 500
-- Result = 33.333333, 499.999995

DECLARE @cost2 DECIMAL(36,5)
SET @cost2 = 500
SELECT @cost2/15, (@cost2/15) * 15
-- Scale is 5 so on multlyping, after dividing, result is 500
-- Result = 33.3333333, 500.000000

DECLARE @cost3 DECIMAL(32,5)
SET @cost3 = 500
SELECT @cost3/15, (@cost3/15) * 15
-- Precision decrease to 32 from 36 result is again not 500
-- Result = 33.33333333, 499.99999995

我需要将此计算存储在db中,我需要最大的准确性。这不是某种科学应用,但客户需要这样做。

我想知道的是,我需要精确度给我十进制(36,5)。我应该使用这个因为它需要17个字节吗? 什么是更好的方法来获得我在实例中解释的准确性?

1 个答案:

答案 0 :(得分:1)

转换的问题是DECIMAL(36,4)在技术上不足以将500的除法的中间结果存储为15. SQL Server正确地将其估计为FLOAT。

正确的做法是首先乘以然后除以。

DECLARE @cost DECIMAL(36,4) 
SET @cost = 500
SELECT @cost/15, @cost*15/15
-- Scale is 4 so on multlyping, after dividing, result is not 500
-- Result = 33.333333, 500