关于sql server:摆脱float的负零值

Getting rid of negative zero value for float

使用SQL Server 2008R2时,在将"相同"数字舍入为十进制或浮点数时会出现符号差异。

显示差异的示例代码:

1
2
3
4
    DECLARE @f float = -0.00001;
    DECLARE @d decimal = -0.00001;
    PRINT CONVERT(varchar,ROUND(@f, 4))  --- outputs -0
    PRINT CONVERT(varchar,ROUND(@d, 4))  --- outputs 0

我需要将浮点值舍入为0,而不是-0。

我认为它归结为IEEE 754规范,它定义了两个零表示(正和负),而小数只有一个零。 我认为浮点数上的相等运算符处理这个问题,但出于兼容性原因,我必须比较两个浮点AS字符串。

是否有一个函数/选项来摆脱负零(至少在转换为字符串时)?


将0.0添加到该值可修复该问题。 谢谢tmyblebu的答案。

1
     PRINT CONVERT(varchar,ROUND(@f + 0.0, 4))

@Pascal尝试下面的代码..让我知道它是否帮助了你。

1
2
3
4
DECLARE @f float = -0.00001;
    DECLARE @d decimal = -0.00001;
    PRINT abs(ROUND(@f, 4))  --- outputs 0
    PRINT abs(ROUND(@f, 4))   --- outputs 0