Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема с типом FLoat  [new]
zsv
Member

Откуда:
Сообщений: 91
выполняю такой код

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

получаю в g1 нормальное значение, а в g2 округленное... в чем причина и как мне все таки преобразовать без потерь.
Спасибо
22 янв 13, 20:25    [13812046]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с типом FLoat  [new]
Crimean
Member

Откуда:
Сообщений: 13148
str() попробуйте. convert и, тем более, cast "не обязаны" заниматься "продвинутым форматированием" данных
22 янв 13, 20:29    [13812057]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с типом FLoat  [new]
Glory
Member

Откуда:
Сообщений: 104760
zsv
а в g2 округленное... в чем причина и как мне все таки преобразовать без потерь.

использовать точный тип данных
22 янв 13, 20:36    [13812083]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с типом FLoat  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
не помню где, но уже было:
declare @f float=19046.91457897 select @f, CAST(@f as nvarchar), CONVERT(nvarchar,@f, 128)
22 янв 13, 20:37    [13812086]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с типом FLoat  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
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.
22 янв 13, 20:37    [13812089]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с типом FLoat  [new]
Crimean
Member

Откуда:
Сообщений: 13148
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
22 янв 13, 20:42    [13812108]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с типом FLoat  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
если без потерь и без приобретений - то только CONVERT(nvarchar,@float, 128)
Преобразование из decimal в varchar. Возможно без лишних нулей?
Будет жалко, если эту фичу похоронят
22 янв 13, 21:08    [13812183]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с типом FLoat  [new]
zsv
Member

Откуда:
Сообщений: 91
Cygapb-007
если без потерь и без приобретений - то только CONVERT(nvarchar,@float, 128)
Преобразование из decimal в varchar. Возможно без лишних нулей?
Будет жалко, если эту фичу похоронят



Спасибо, вот так работает но только в 2005 сервере, а в 2000 к сожалению нет...прийдется использовать Str().
Всем спасибо
22 янв 13, 21:25    [13812210]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить