我认为我对精度与比例的理解可能不正确,因为以下示例产生的值对我来说没有意义。decimal(32, 14)
轮结果到6位小数,而decimal(18, 14)
发到19我的理解小数的是decimal(p, [s])
,这里p
是数字的总数,s
是数字的小数点(IG后的数字,decimal(10, 2)
会导致8位,左侧是小数和 2 位数字)。这不正确吗?
我创建了一个小例子来说明看似奇怪的行为:
--------------------
-- Truncates at pipe
-- 1.043686|655...
--------------------
declare @dVal1 decimal(32, 14) = 10
declare @dVal2 decimal(32, 14) = 9.581419815465469
select @dVal1 Val1, @dVal2 Val2, @dVal1 / @dVal2 CalcResult
----------------
-- Most accurate
----------------
declare @dVal3 decimal(18, 14) = 10
declare @dVal4 decimal(18, 14) = 9.581419815465469
select @dVal3 Val3, @dVal4 Val4, @dVal3 / @dVal4 CalcResult
Run Code Online (Sandbox Code Playgroud)
那么问题来了,我缺少什么来理解这一点?我读过的文章和 msdn 博客似乎没有提供清晰的信息(至少对我的思考过程而言)。有人可以向我解释为什么更高的精度似乎会导致比例损失?