Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Деление двух numeric  [new]
делитьnumeric
Guest
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: https://msdn.microsoft.com/ru-ru/library/ms190476(v=sql.105).aspx

Сказано что если 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)
26 фев 16, 11:56    [18866520]     Ответить | Цитировать Сообщить модератору
 Re: Деление двух numeric  [new]
Glory
Member

Откуда:
Сообщений: 104760
делитьnumeric
Результат: 0.99999999999999998999


Microsoft SQL Server 2014 - 12.0.2480.0 (X64) Jan 28 2015 18:53:20 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)

0.99199993999999447991
26 фев 16, 11:58    [18866543]     Ответить | Цитировать Сообщить модератору
 Re: Деление двух numeric  [new]
делитьnumeric
Guest
Glory, да простите, копировал другой пример, чтобы нагляднее было. Выводит у меня также как и у вас, но хочется добиться бОльшей точности.

Как-то это возможно?
26 фев 16, 12:00    [18866556]     Ответить | Цитировать Сообщить модератору
 Re: Деление двух numeric  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
делитьnumeric,

Как Вы получите желаемую точность, если ее не было изначально?
26 фев 16, 12:07    [18866603]     Ответить | Цитировать Сообщить модератору
 Re: Деление двух numeric  [new]
делитьnumeric
Guest
Владислав Колосов, я вот и спрашиваю. Как ее сделать? И можно ли ?
26 фев 16, 12:17    [18866675]     Ответить | Цитировать Сообщить модератору
 Re: Деление двух numeric  [new]
Cane Cat Fisher
Member

Откуда:
Сообщений: 1809
делитьnumeric
На калькуляторе: 0,99199993999999447991999939999994

Как ее сделать? И можно ли ?


MS SQL верно рассчитывает точность результата в зависимости от точности аргументов.

То, что на калькуляторе после 17-го знака - это мусор, ничего не значащие знаки.

В идеале вы могли бы заявить, что ваши аргументы имеют точность, скажем, (36,2) и по формулам вроде бы получить итоговую точность (75, 39). Но тут натыкаемся на ограничение, что максимальное значение точности 38, и если результат требует больше, то усекается именно масштаб, так что цифровой хвост будет даже короче.

А вам действительно нужна такая точность? Измеряете расстояние до Солнца в миллиметрах?
26 фев 16, 14:12    [18867455]     Ответить | Цитировать Сообщить модератору
 Re: Деление двух numeric  [new]
vivatik
Guest
делитьnumeric,
а так:
SELECT @A * 1.0 / @B
1 мар 16, 21:59    [18884760]     Ответить | Цитировать Сообщить модератору
 Re: Деление двух numeric  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
vivatik
делитьnumeric,
а так:
SELECT @A * 1.0 / @B

ну это всё кардинально меняет :)
2 мар 16, 10:22    [18886076]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить