首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理ssis数据流任务中的数据类型双精度浮点[DT_R8]

如何处理ssis数据流任务中的数据类型双精度浮点[DT_R8]
EN

Stack Overflow用户
提问于 2015-08-19 11:28:14
回答 2查看 24.8K关注 0票数 2

我有SSIS数据流任务,需要将数据从一个sql数据库传输到另一个sql数据库。我的SQL中的源数据库列数据类型是float,在ssis中是double-precision float [DT_R8]。目标列数据类型为Varchar(50)。当我执行数据流时,传送到目标表的数据与源数据不同,例如:

代码语言:javascript
复制
    +------------+---------------------------------+
    | SourceValue| DestinationValue After execution|
    +------------+---------------------------------+
    | 0.579      | 0.578999999999999965            |
    | 0.637      | 0.63700000000000001             |
    | 0.503      | 0.503                           |
    +------------+---------------------------------+

因此,对于一些价值观,它是相同的,但对另一些不同。我尝试过三种方法来解决这个问题:-

  1. 尝试将查询转换为cast(col as varchar)
  2. 尝试将其转换为浮动cast(col as float)
  3. 尝试更改SSIS目标列中的数据类型,与源列相同。double-precision float [DT_R8]。虽然我收到警告说,数据类型需要在执行时更改。

但上述任何一步都解决不了我的问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-20 17:40:48

我找到了解决方案,在源流中,我将数据类型从double-precision float [DT_R8]更改为DT_DECIMAL。它现在工作正常,值按原样传输到目标表。

例:

代码语言:javascript
复制
+------------+---------------------------------+
    | SourceValue| DestinationValue After execution|
    +------------+---------------------------------+
    | 0.579      | 0.579                           |
    | 0.637      | 0.637                           |
    | 0.503      | 0.503                           |
    +------------+---------------------------------+
票数 6
EN

Stack Overflow用户

发布于 2015-08-19 12:39:46

这就是浮子的工作方式。我假设您正在使用一些工具来查看源值:大多数工具都会修剪浮点值(将其四舍五入以供显示),所以我打赌0.579实际上是0.5789999等等。如果您还不知道,浮点数无论如何都不精确。看看维基百科文章,特别是第7部分:准确性问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32094209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档