Проблема с типом FLoat

zsv
Дата: 22.01.2013 20:25:36
выполняю такой код

declare @GKal FLOAT
SET @GKal=19046.91457897
select @GKal as g1, Cast(@GKal as varchar(100)) as g2

получаю в g1 нормальное значение, а в g2 округленное... в чем причина и как мне все таки преобразовать без потерь.
Спасибо
Crimean
Дата: 22.01.2013 20:29:12
str() попробуйте. convert и, тем более, cast "не обязаны" заниматься "продвинутым форматированием" данных
Glory
Дата: 22.01.2013 20:36:18
zsv
а в g2 округленное... в чем причина и как мне все таки преобразовать без потерь.

использовать точный тип данных
Cygapb-007
Дата: 22.01.2013 20:37:06
не помню где, но уже было:
declare @f float=19046.91457897 select @f, CAST(@f as nvarchar), CONVERT(nvarchar,@f, 128)
invm
Дата: 22.01.2013 20:37:46
zsv
в чем причина
http://msdn.microsoft.com/ru-ru/library/ms187928%28v=sql.105%29
Стили данных типа float и real

Если expression равен float или real, то параметр style может иметь один из типов, перечисленных в следующей таблице. Другие значения обрабатываются как 0.

ЗначениеВыходные данные
0 (по умолчанию)Не более 6 разрядов. По необходимости используется экспоненциальное представление чисел.
1Всегда 8 разрядов. Всегда используется экспоненциальное представление чисел.
2Всегда 16 разрядов. Всегда используется экспоненциальное представление чисел.
zsv
как мне все таки преобразовать без потерь
Пользоваться numeric(decimal) вместо float.
Crimean
Дата: 22.01.2013 20:42:00
set nocount on
declare @GKal FLOAT
SET @GKal=19046.91457897
select @GKal as g1, Cast(@GKal as varchar(100)) as g2
select str( @GKal , 53, 12 ) as g3

g1                                                    g2                                                                                                   
----------------------------------------------------- ---------------------------------------------------------------------------------------------------- 
                                   19046.914578970001 19046.9

g3                                                    
----------------------------------------------------- 
                                   19046.914578970001
Cygapb-007
Дата: 22.01.2013 21:08:16
если без потерь и без приобретений - то только CONVERT(nvarchar,@float, 128)
Преобразование из decimal в varchar. Возможно без лишних нулей?
Будет жалко, если эту фичу похоронят
zsv
Дата: 22.01.2013 21:25:07
Cygapb-007
если без потерь и без приобретений - то только CONVERT(nvarchar,@float, 128)
Преобразование из decimal в varchar. Возможно без лишних нулей?
Будет жалко, если эту фичу похоронят



Спасибо, вот так работает но только в 2005 сервере, а в 2000 к сожалению нет...прийдется использовать Str().
Всем спасибо