2015-04-19 78 views
3

對於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規範,它定義了兩個零表示(正數和負數),而小數只有一個零。我認爲float上的相等運算符可以處理這個問題,但出於兼容性的原因,我必須比較兩個浮點AS字符串。

是否有一個函數/選項來擺脫負零(至少當轉換爲字符串)?

+2

醜陋但有效的解決方案將是這樣的: 'CONVERT(VARCHAR,CASE WHEN ROUND(@f,4)= -0 0 THEN ELSE ROUND(@f,4)END)'' –

+0

PRINT abs(CONVERT(varchar,ROUND(@f,4)))' –

+0

@RahulTripathi - 這也會將'-4'轉換爲'+ 4' –

回答

-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 
+0

這段代碼將輸出-4.0和4.0的相同值。我想擺脫只有負零。 – Pascal

2

將值加0.0可以修復問題。感謝tbleblebu的答案。

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