Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: тип numeric и работа с ним

Добрый день, уважаемые специалисты. Прошу совета.

Суть проблемы:
Есть таблицы, с полями Numeric.

Запись в таблицы происходит таким образом:
Допустим пришло число 1.123Е-20 соответственно в таблице отражается число 0.0000000000000000001123.

Читается из таблицы точно такое же число 0.0000000000000000001123.

Вопрос. Возможно ли отображать в таблицах с полями Numeric числа в формате 1.123Е-20?
Если нет, то возможно ли правильно преобразовать число к первоначальному виду из 0.0000000000000000001123 в 1.123Е-20 для чтения?

Суть в том, что если просто проделать ::float то он оставит до 15 знаков, мне же нужно хотя бы 17 знаков оставить, тоесть при работе с числами вида 0.000000000000000000000000000000001495679999999995675679999
я получаю
select '0.000000000000000000000000000000001495679999999995675679999'::float;
1.49568e-33
что меня не устраивает, поскольку значащих цифр крайне мало, хотелось бы что то типа 1.49567999999999567567e-33, такое возможно?

Заранее извиняюсь, если чушь какую то спрашиваю, сильно не пинайте, только начинаю разбираться в этом всем.
Ответ:
inforse
в драйвере задан жесткий буфер в 36 знаков

Получается, это ошибка драйвера. Кто ему дал право обрезать значения numeric?

Может быть получится использовать to_char(), подумайте об обходном пути.
Создать вьюшку с дополнительным полем текстового типа со значениями to_char().
Текстовые значения ведь драйвер не обрезает.

Использовать прямо в таблице текстовое поле вместо numeric для хранения
этих значения можно, но нельзя, потому что некрасиво очень. :)

inforse
Я не могу понять, почему драйвер считывает все знаки, а не сворачивает в степень.

Это было бы решением вашей проблемы, но не решением в общем случае.
А если у кого-то значения numeric с экспонентой и сотней значащих цифр.
Вопрос: Деление двух numeric

DECLARE @A NUMERIC (17,2)
DECLARE @B NUMERIC (17,2)

SET @a = 991999939999994.47
SET @b = 999999999999999.99

SELECT @A / @B


Результат: 0.99999999999999998999
На калькуляторе: 0,99199993999999447991999939999994

По MSDN:

Сказано что если e1/e2 то точность p1 - s1 + s2 + max(6, s1 + p2 + 1) а масштаб max(6, s1 + p2 + 1).

Итого получаем numeric(37,20)

Можно ли как-то добиться чтобы в результате вычисления была большая точность?

По условию задачи в @a значение будет строго меньше @b, в идеале хочется получится на выходе numeric(38,37).

Но при этом максимальное вводимое число numeric(17,2)
Ответ:
vivatik
делитьnumeric,
а так:
SELECT @A * 1.0 / @B

ну это всё кардинально меняет :)
Вопрос: Ошибка Argument data type numeric is invalid for argument 3 of substring function

Доброго времени суток, коллеги возник случай
Вендор используемого ПО в нашей конторе, прислал скрипт ХП t-sql, который при попытке добавить его на сервер выдает ошибку:
Argument data type numeric is invalid for argument 3 of substring function

на мою просьбу исправить данную ошибку вендор прислал сл. ответ, цитирую:
"Такая ошибка Вы ходит на неподдерживаемой версии MS SQL сервера. Видимо, у Вас 2005 сервер? Вам необходимо установить 2014"

сервера 2014 под рукой нет проверить не могу. насколько я понял из документации аргумент length - Is a positive integer or bigint expression that specifies how many characters of the expression will be returned. Меня пытаются надурить или я что то не знаю?

declare @test numeric(15,0)
set @test = 8
select substring('testtesttest',1,@test)
проверьте на 2014 кто может, спс заранее.
Ответ:
alexeyvg
redsunrise
проверьте на 2014 кто может, спс заранее.
И на 2008 работает, и на 2014. На 2005 не проверял, нету под рукой

alexeyvg спасибо.
Вопрос: Замена типа Numeric(18,5)

Добрый день!

Появилась потребность заменить тип Numeric(18,5) на Numeric(21,8). Как FB2.5 будет работать с такими числами? Или предложите альтернативный тип?
Ответ:
__Avenger__
А у double precission действительно такой разброс от -3.40 * 10^308 до 3.40 * 10^308?
По числам, близким нулю, был как-то...
Вопрос: тип данных (ms sql) numeric(9, 4)

здравствуйте,

подскажите, пожалуйста, как правильно сделать?
ситуация следующая: присоединенные таблицы из ms sql 2008 в access 2003, в таблицах есть тип данных numeric(9,4)
когда вводятся данные в ексесе, то, если вводить 3-х разрядные числа (до запятой), то все нормально, если 4-х и более разрядные, то число вводится, но в ексесе не отображается, также эти строчки изменить не дает, говорит, что запись была изменена другим пользователем и т.д. если просматривать в mssql-е, то все введено и отображается.
может тип данных нужно изменить?
Ответ: linav,

С real будет другая проблема. Это не точній тип
Установи этот фикс 8605488, должно помочь
Вопрос: непонятки с конвертацией CONVERT(NUMERIC(20, 2), @real)

declare
	@real real = 123456789;
SELECT CONVERT(NUMERIC(20, 2), @real)

почему я получаю 123456792.00?
Ответ:
abort
кстати Ваши "звездные" ответы мне не помогли.
Glory вам сразу написал:
Glory
Вы видели, какое значение появилось в переменной после присвоения ей значения ?

И потом, когда вы не отреагировали, привёл даже код, показывающий ошибку.

Нужно всё таки самому усилия прикладывать, и почитывать документацию...
Вопрос: Rand() для Numeric с 0 и 1

Нужно заполнять поля таблицы случайными числами от 0 до 1 с шагом 0.001, т.е. в формате numeric(18,3)
Пробовал через

SELECT
Product_ID,
(SELECT 0 + (1-0) * RAND(CHECKSUM(NEWID()))) a
FROM dbo.Products


но 0 и 1 не попадают в выборку.

Помогите плиз!
Ответ: Glory,

спасибо!!!
Вопрос: Ошибка преобразования nvarchar к numeric

Искал в сети ответ на совой вопрос но не получилось найти ничего путнего.

Есть следующая задача:

Во внешнем источнике именуемом SAP, хранятся данные продаж. Я выгружаю эти данные с помощью BAPI в БД MS SQL но возникат ошибка (преобразования nvarchar к numeric) на моменте загрузки отрицательных значений. В SAP минусовые продажи отборажаются как "100.00-". Есть ли способ конвертировать эту значение в нятное для MS SQL "- 100.00"?

Спасибо!
Ответ:
DECLARE @Str NVARCHAR(1000)='100.00-';
SELECT (1-2*SIGN(CHARINDEX('-',@Str)))*CAST(REPLACE(@Str,'-','') AS DEC(5,2));
Вопрос: проблемы с длиной поля numeric в старом foxpro 2.5

Непонятно следующее: максимальная длина поля numeric может быть 20, мне надо 17, НО последняя цифра сама становиться 0.
Какого ?!!! Подскажите пжлст.
Ответ: В 2.5 нет, в версиях посвежее есть, только INT всего 9 знаков.
Вопрос: ещё раз о numeric

Хочу уточнить по поводу правильного обращения с числами в FB:
Если в базу могут попадать числа от 1Е-6 до 1Е6, которые надо будет перемножать, то:
- хранить их надо в numeric(12,6)
- параметры и результаты процедур с ними делать double precision (чтобы не нарваться на переполнение)
?
Ответ:
Dimitry Sibiryakov
tantico2
Если предполагается много арифметики с сохранёнными числами

.... то исходить надо из задачи и предметной области, а не из того что на форуме пишут.
+1


tantico2 ,
Если просто перемножить два числа, это одно, но ведь предположительно будет что-то посложнее?