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 |