SSIS 2008 R2:围绕浮动列

SSIS 2008 R2: ROUND the float column

Table:

create table float_dt_test
(
    cola float,
    colb float
);

插入:

insert into float_dt_test values(57,999.857894736842);
insert into float_dt_test values(0.225,999.99);

我想使用 SSIS 将给定数据导出到 .txt 文件。

我想导出第 6 轮的值。

txt 文件中的预期输出:

Cola                    Colb
-------------------------------------------
57                      999.857895
0.225                   999.99

为此我编写了以下查询:

SELECT ROUND(Cola,6) as cola,
       ROUND(Colb,6) as colb 
FROM float_dt_test;

但是导出后的文件看起来像:

Cola                    Colb
-------------------------------------------
57                      999.85789499999998
0.22500000000000001     999.99000000000001

舍入值不会改变内部表示。

四舍五入后转为小数:

SELECT CONVERT(DECIMAL(10, 6), ROUND(Cola, 6)) as cola,
       CONVERT(DECIMAL(10, 6), ROUND(Colb, 6)) as colb 
FROM float_dt_test;

实际上,ROUND() 现在是多余的。保留它不会造成任何伤害,因为它使操作明确。

您可以使用数据转换直接在 SSIS 中执行此操作:

DataFlow Task 中,您可以使用以下表达式从 SSIS 工具箱中添加两个 derived columns

(DT_NUMERIC,10,6)ROUND([Cola],6)

(DT_NUMERIC,10,6)ROUND([Colb],6)

并将两个派生列映射到平面文件目标。