Prod和Dev之间的十进制舍入行为不同(SSIS包)

时间:2017-07-11 03:45:44

标签: sql sql-server ssis sql-server-2012

我有一个计算Rate和RateIns的SSIS包。

当我在DEV环境中运行时,Rate = 1.3850588235,RateIns = 1.138941176 5

然而,当我在Prod环境中运行时,Rate = 1.3850588235,RateIns = 1.138941176 4

我试图模仿SSMS中的SSIS逻辑,代码如下:

CREATE TABLE #TEMP(
GST [decimal](10, 2) NULL,
[GSTFin] [decimal](10, 2) NULL,
[GSTExl] [decimal](10, 2) NULL,
[Rate] [decimal](18, 10) NULL,
[RateIns] [decimal](18, 10) NULL
)
insert into #temp values (11773.00,2092.00,8500.00,0,0)
UPDATE #TEMP
SET Rate=ISNULL(GST,0)/ISNULL(GSTExl,0)
,RateIns=(ISNULL(GST,0) - ISNULL(GSTFin,0))/ISNULL(GSTExl,0) 

SELECT * FROM #temp
DROP TABLE #TEMP

结果:DEV& Prod显示相同的值: 利率= 1.3850588235,RateIns = 1.1389411765

这证实了,问题出在SSIS包中。 我比较了Prod和Dev软件包中组件的元数据。全部比赛。 实际上,它已经部署到Prod!的相同SSIS包中。

我想知道,为什么Prod SSIS包显示RateIns = 1.1389411764

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

这可能是一个愚蠢的问题,但是prod与dev的硬件相同。不同的机器很容易为浮点数学提供不同的结果。也许您可以根据IEEE 754 https://en.wikipedia.org/wiki/IEEE_754规则进行数学计算,看看是否至少有一个环境能够提供正确的结果。

这是一个在线ieee754计算器 http://babbage.cs.qc.cuny.edu/IEEE-754/