我只是在我整理的报告中查看一些非常小的差异,我很困惑 SQL Server 中用于投射的最佳实践是什么,如果有人可以指出正确的方向来解释我的内容我看到了。
使用与示例表中所示数据相似的当前计算,在少数情况下会出现非常小的 1p 误差@data
。
有人可以指出我正确的方向,或者至少告诉我我在看什么,以便我可以进一步研究?
下面的代码产生示例输出:
declare @data table (qty decimal(24,12), price decimal(24,12), multiplier decimal(24,12), rate1 decimal(24,12), rate2 decimal(24,12))
insert into @data
select 21505.000000000000, 30.475000000000, 1.000000000000,1.166500000000, 1.166500000000
select round(data.current_method, 2) as current_method_round, round(data.expected_result_method, 2) as expected_result_round, * from
(select
((qty * price * multiplier) /rate1) * rate2 as current_method,
cast(cast(cast(qty * price * multiplier as decimal(24,12)) / rate1 as decimal(24,12)) * rate2 as decimal(24,12)) as expected_result_method,
((21505.000000000000 * 30.475000000000 * 1.000000000000) / 1.166500000000) * 1.166500000000 as checkvalue,
*
from @data ) data