2010-07-28 58 views
3

我試圖轉換一些decimalsvarchar,但他們得到四捨五入爲什麼這個Sql Server CAST(..)將Decimal舍入到VarChar?

有人能告訴我爲什麼嗎?

declare @UpperLeftLatitude DECIMAL, 
    @UpperLeftLongitude DECIMAL, 
    @BottomRightLatitude DECIMAL, 
    @BottomRightLongitude DECIMAL 

SET @UpperLeftLatitude = 38.663 
SET @UpperLeftLongitude = -122.857 
SET @BottomRightLatitude = 37.795 
SET @BottomRightLongitude = -121.219 


DECLARE @SearchRectangleString VARCHAR(MAX); 
SET @SearchRectangleString = 'POLYGON((' + CONVERT(VARCHAR(50), @UpperLeftLatitude) + ' ' + CAST(@UpperLeftLongitude AS VARCHAR(50)) + ',' 
    + CAST(@BottomRightLatitude AS VARCHAR(50)) + ' ' + CAST(@UpperLeftLongitude AS VARCHAR(50)) + ',' 
    + CAST(@BottomRightLatitude AS VARCHAR(50)) + ' ' + CAST(@BottomRightLongitude AS VARCHAR(50)) + ',' 
    + CAST(@UpperLeftLatitude AS VARCHAR(50)) + ' ' + CAST(@BottomRightLongitude AS VARCHAR(50)) + ',' 
    + CAST(@UpperLeftLatitude AS VARCHAR(50)) + ' ' + CAST(@UpperLeftLongitude AS VARCHAR(50)) + '))'; 

    SELECT @SearchRectangleString 

------------------- 
POLYGON((39 -123,38 -123,38 -121,39 -121,39 -123)) 

(1 row(s) affected) 

注:是的,我知道我的緯度/多頭周圍走錯了路。我會盡快切換。

回答

6

這是因爲您的小數未指定長度。他們不存儲任何小數位。

嘗試以下方法:

DECLARE @test DECIMAL, @test2 DECIMAL(8,4) 
SET @test = 12.3456 
SET @test2 = 12.3456 

SELECT @test, @test2 
+1

遠遠地抱-發芽。我想在經歷了15年的Sql之後,我會選擇那個shiz。該回家了。腦中的單個腦細胞非常疲倦。謝了哥們! – 2010-07-28 07:46:40

1

爲對照提到它被四捨五入...

當省略或具有0(默認值)一 值函數, 數值_是圓形。當指定了0以外的 值時, 數值表達式被截斷。

來源:ROUND (T-SQL)