对于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字符串。
是否有一个函数/选项来消除负零(至少在转换为字符串时)?
答案 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