在SSIS中,我有一个派生专栏给我一个我没想到的结果。对于这个公式,它特别简单((200 * 29.7) - 5940)* 1我希望该值为0.但是当查看此派生列的结果时,我发现该值为0.000000000000909494701772928!< / p>
用于此计算的值直接从数据库中提取,并且所有这些值都是双精度浮点数据类型。
不幸的是,只需将结果列的数据类型更改为整数就无济于事,因为我需要这些小数位。
我很好奇,这个数字的原因可能是什么?
答案 0 :(得分:0)
差异的原因是数值精度。
尝试在SSMS中运行这些简单的SELECT
:
select (((cast(200 as numeric(9)) * cast(29.7 as numeric(9)) - cast(5940 as numeric(9)))))
select (((cast(200 as numeric(38,17)) * cast(29.7 as numeric(38,17)) - cast(5940 as numeric(38,17)))))
正如@Nick指出的那样,使用DECIMAL
或NUMERIC
代替FLOAT
。
DECIMAL
和NUMERIC
的默认精度为18。
将数据类型从双精度浮点[DT_R8]
更改为[DT_DECIMAL]