Почему этот Sql Server CAST (..) округляет десятичное число до VarChar? - PullRequest
3 голосов
/ 28 июля 2010

Я пытаюсь преобразовать некоторые decimals в 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)

ПРИМЕЧАНИЕ: Да, я знаю, что мои ширинки / лонги неверны.Я скоро поменяю их.

Ответы [ 2 ]

6 голосов
/ 28 июля 2010

Это потому, что ваши десятичные числа не указаны с длиной. Они не хранят десятичные разряды.

Попробуйте следующее:

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

 SELECT @test, @test2
1 голос
/ 28 июля 2010

Как уже упоминалось, он скругляется ...

Когда функция опущена или имеет значение 0 (по умолчанию), числовое выражение - округлено . Когда указано значение, отличное от 0, Выражение numeric_excression усечено.

Источник: КРУГЛЫЙ (T-SQL)

...