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.78260869565217389259.7826086956521739150
尝试将225转换为decimal(38,19)后再相乘:
SELECT CAST(225 AS decimal(38,19)) * ProratePercent, ProratePercent FROM #ExampleData
结果精度丢失更严重,所有行仅显示6位小数9.782609。
请问如何让SQL返回完整的计算结果?
内容的提问来源于stack exchange,提问作者Vaccano
相关产品推荐
相关产品推荐

