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

Откуда:
Сообщений: 87
Доброго времени суток.

declare @t table (n decimal(18, 5))

insert into @t (n) values (0.00001)

select convert(float, n) from @t

выдает 1E-05

А надо 0.00001

Возможно ли такое при конвертации во флоат?

Заранее спасибо!

Microsoft SQL Server 2012 - 11.0.5343.0 (X64)
10 май 16, 16:18    [19154067]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом 1E-05 преобразовать в 0.00001  [new]
BERSERC
Member

Откуда:
Сообщений: 442
Кабысдох,

declare @t table (n decimal(18, 5))

insert into @t (n) values (0.00001)

select convert(decimal(18, 5), convert(float, n)) from @t
10 май 16, 16:21    [19154100]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом 1E-05 преобразовать в 0.00001  [new]
Кабысдох
Member

Откуда:
Сообщений: 87
BERSERC
Кабысдох,

declare @t table (n decimal(18, 5))

insert into @t (n) values (0.00001)

select convert(decimal(18, 5), convert(float, n)) from @t


Спасибо, но нет. На выходе необходимо получить значение float
10 май 16, 16:23    [19154117]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом 1E-05 преобразовать в 0.00001  [new]
Хе-хе )
Guest
float это число с плавающей запятой, а E его эксподенциальня форма
MS даже говорит его диапозон так : - 1,79E+308 — -2,23E-308, 0 и 2,23E-308 — 1,79E+308
https://technet.microsoft.com/ru-ru/library/ms173773(v=sql.110).aspx
10 май 16, 16:29    [19154165]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом 1E-05 преобразовать в 0.00001  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Кабысдох,

эээээ, сервер не хранить внешний вид числа, только его значение, если вам надо вывести 0.00001 так и выводите как строку
select str(convert(float, n), 19, 5) from @t
10 май 16, 16:38    [19154216]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом 1E-05 преобразовать в 0.00001  [new]
sergeimv
Member

Откуда: Россия, г.Казань
Сообщений: 42
select format(n, 'F5') from @t
10 май 16, 18:16    [19154852]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом 1E-05 преобразовать в 0.00001  [new]
Кабысдох
Member

Откуда:
Сообщений: 87
Попробую еще раз уточнить задачу путем вставки еще одной строки:

declare @t table (n decimal(18, 5))

insert into @t (n) values (0.00001)
insert into @t (n) values (0.25)

select format(n, 'F5') from @t
select str(convert(float, n), 19, 5) from @t

Эти решения дают результат:

0.00001,
0.25000

Но с таким результатом можно просто сделать
select n from @t

Задача же получить:
0.00001,
0.25
Без нулей после.

Просто конвертация во float дает
1E-5
0.25
11 май 16, 14:14    [19158511]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом 1E-05 преобразовать в 0.00001  [new]
sergeimv
Member

Откуда: Россия, г.Казань
Сообщений: 42
select format(n, 'G29') from @t
11 май 16, 14:28    [19158586]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом 1E-05 преобразовать в 0.00001  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
sergeimv
select format(n, 'G29') from @t
format c:
11 май 16, 14:31    [19158599]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом 1E-05 преобразовать в 0.00001  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
Символьным представлением числа занимается клиентское приложение. Как оно его превратит символы, так на экране и увидите.
11 май 16, 14:37    [19158628]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом 1E-05 преобразовать в 0.00001  [new]
Кабысдох
Member

Откуда:
Сообщений: 87
sergeimv
select format(n, 'G29') from @t


1E-05
0.25
11 май 16, 14:37    [19158631]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом 1E-05 преобразовать в 0.00001  [new]
пьяный тюлень
Member

Откуда:
Сообщений: 100
select replace(rtrim(replace(n, '0', ' ')), ' ', '0') from @t
11 май 16, 14:41    [19158667]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом 1E-05 преобразовать в 0.00001  [new]
iiyama
Member

Откуда:
Сообщений: 642
Люди, будьте добрее
Кабысдох, задача отображения значений решается на клиенте, а не на сервере
11 май 16, 14:42    [19158671]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом 1E-05 преобразовать в 0.00001  [new]
sergeimv
Member

Откуда: Россия, г.Казань
Сообщений: 42
iiyama
Люди, будьте добрее
Кабысдох, задача отображения значений решается на клиенте, а не на сервере

Полностью поддерживаю - этим должно заниматься клиентское приложение.

Такой вариант должен работать:
select format(n, '#0.###########################') from @t
11 май 16, 14:48    [19158709]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом 1E-05 преобразовать в 0.00001  [new]
Кабысдох
Member

Откуда:
Сообщений: 87
Всем спасибо,
Не хотел завязываться на клиенте, - думал, есть более изящное решение, но, видать, придется.
Но варианты:

select replace(rtrim(replace(n, '0', ' ')), ' ', '0') from @t
select format(n, '#0.###########################') from @t


работают.
11 май 16, 15:35    [19159057]     Ответить | Цитировать Сообщить модератору
 Re: Каким образом 1E-05 преобразовать в 0.00001  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
Кабысдох
Не хотел завязываться на клиенте, - думал, есть более изящное решение, но, видать, придется.
Какое же более изящное?
Вам пишут, что float хранится в таблице в виде массива 64 бит, из которых часть - мантисса, а часть - порядок.
Если вам надо:
Кабысдох
На выходе необходимо получить значение float
то на клиент опять же приходит массив 64 бит, из которых часть - мантисса, а часть - порядок.
Какое может быть решение, что бы управлять разнообразным показом этого массива? Только на клиенте.

Вот если вы хотите с сервера получить поле varchar(4000) в виде озвучки, голосом, но только как поле типа varchar(4000), тип менять нельзя, то как это можно сделать на сервере?
11 май 16, 18:00    [19159983]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить