首页 > 解决方案 > 在 sql server 中未按预期实现使用 round 函数的截断

问题描述

我有一个存储在浮点数据类型中的字段。我需要将其转换为数字,而不会在转换过程中隐式四舍五入。

我已经尝试过round(float_data,scale,1)。在大多数情况下似乎都可以正常工作。但是当小数点后的位数小于圆形函数中提到的比例时,它会尝试降低数字而不是在末尾附加 0。

例如,round (0.0243,5,1) 返回 0.02429。为什么不简单地将数字截断为提到的位数?

我知道这个问题是当我们使用 float 作为源数据类型但我无法更改源数据类型时。

当通过 ssis 实现相同的截断时,就会发生相同的截断。sql中有什么方法可以实现吗?

标签: sqlssis-2012msbi

解决方案


因为当转换为浮点数时,十进制 0.0243 存储为 0.02429999969899654388427734375,截断为 0.02429。看起来你想要舍入而不是截断,例如

declare @f float = 0.0243
select round(@f,5,0)

推荐阅读