摆脱浮动的负零值

时间:2015-04-19 11:14:22

标签: sql-server floating-point ieee-754

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

显示差异的示例代码:

    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字符串。

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:-1)

@Pascal尝试以下代码..如果有帮助,请告诉我。

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