You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server乘法精度提前丢失:如何获取完整计算结果?

如何让SQL Server返回decimal乘法的完整精度结果?

以下是示例查询代码:

DROP TABLE IF EXISTS #ExampleData
CREATE TABLE #ExampleData ( [ProratePercent] decimal(38,19) NOT NULL)

INSERT INTO #ExampleData ([ProratePercent])
VALUES
( 0.0434782608695652174 ),( 0.0434782608695652174 ),( 0.0434782608695652174 ),
( 0.0434782608695652174 ),( 0.0434782608695652174 ),( 0.0434782608695652174 ),
( 0.0434782608695652174 ),( 0.0434782608695652174 ),( 0.0434782608695652174 ),
( 0.0434782608695652174 ),( 0.0434782608695652174 ),( 0.0434782608695652174 ),
( 0.0434782608695652174 ),( 0.0434782608695652174 ),( 0.0434782608695652174 ),
( 0.0434782608695652174 ),( 0.0434782608695652174 ),( 0.0434782608695652174 ),
( 0.0434782608695652174 ),( 0.0434782608695652174 ),( 0.0434782608695652174 ),
( 0.0434782608695652173 ),( 0.0434782608695652173 )
  
SELECT  CAST(225 AS decimal(38,19)) * ProratePercent, ProratePercent
FROM    #ExampleData

该查询创建的临时表中,ProratePercent字段为decimal(38,19)类型,最后两行值末尾为3,其余为4。执行上述查询时,225 * ProratePercent的结果被提前四舍五入到15位小数,所有行均显示为9.782608695652174,无法体现末尾值的差异。

但直接执行字面量乘法计算时,能得到完整精度的期望结果:

SELECT  225 * 0.0434782608695652173
SELECT  225 * 0.0434782608695652174

返回结果分别为:
9.7826086956521738925
9.7826086956521739150

尝试将225转换为decimal(38,19)后再相乘:

SELECT CAST(225 AS decimal(38,19)) * ProratePercent, ProratePercent FROM #ExampleData

结果精度丢失更严重,所有行仅显示6位小数9.782609。

请问如何让SQL返回完整的计算结果?


内容的提问来源于stack exchange,提问作者Vaccano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 13:57:33