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

Откуда:
Сообщений: 234
Имеем следующий пример. Почему при делении decimal(38, 9) на decimal(14, 7) получается decimal(38, 6). Мы же теряем точность.
Что я не понимаю. Помогите, пжл.

declare @A decimal(38, 9)
set @A = 1.123123123

declare @B decimal(14, 7)
set @B = 1.5

select @A/@B as F1
13 фев 13, 18:23    [13922372]     Ответить | Цитировать Сообщить модератору
 Re: Расчеты с использованием decimal - можете объяснить почему  [new]
Glory
Member

Откуда:
Сообщений: 104760
OperationResult precisionResult scale *
e1 / e2p1 - s1 + s2 + max(6, s1 + p2 + 1)max(6, s1 + p2 + 1)
13 фев 13, 18:26    [13922383]     Ответить | Цитировать Сообщить модератору
 Re: Расчеты с использованием decimal - можете объяснить почему  [new]
Павел-П
Member

Откуда:
Сообщений: 234
Glory,

Спасибо, уже тоже нашел. Прикольно.
13 фев 13, 18:27    [13922387]     Ответить | Цитировать Сообщить модератору
 Re: Расчеты с использованием decimal - можете объяснить почему  [new]
Павел-П
Member

Откуда:
Сообщений: 234
Павел-П,

А как вы отслеживаете такие преобразования в расчетах. Ведь реально можно потерять точность и не заметить.
13 фев 13, 18:28    [13922396]     Ответить | Цитировать Сообщить модератору
 Re: Расчеты с использованием decimal - можете объяснить почему  [new]
Glory
Member

Откуда:
Сообщений: 104760
Павел-П
Прикольно.

Прикольно - это делать аргумент(ы) сразу с максмимальным разрядом/точностью и ждать, что сервер каким то образом превысит их при вычислениях.
13 фев 13, 18:29    [13922399]     Ответить | Цитировать Сообщить модератору
 Re: Расчеты с использованием decimal - можете объяснить почему  [new]
Glory
Member

Откуда:
Сообщений: 104760
Павел-П
Ведь реально можно потерять точность и не заметить.

А зачем вам для числа 1.123123123 нужно (38, 9) ?
Есть float. Есть хранение отдельно целой и дробной частей+самописные математические функции для этого.
13 фев 13, 18:31    [13922407]     Ответить | Цитировать Сообщить модератору
 Re: Расчеты с использованием decimal - можете объяснить почему  [new]
Павел-П
Member

Откуда:
Сообщений: 234
Glory,

Это я просто такой пример привел. Он создан на основании другого примера.
Просто тут реально косяков может быть в расчетах, если более или менее крупные значения сумм используются. Ну так уж получается, что очень часто разработчик работает с историческими системами, или ему уже подсунули такие типы.

Просто не так уж сразу и догадаешься о такой конверсии.
13 фев 13, 18:55    [13922479]     Ответить | Цитировать Сообщить модератору
 Re: Расчеты с использованием decimal - можете объяснить почему  [new]
Павел-П
Member

Откуда:
Сообщений: 234
Glory,


У меня тип decimal (39,9) получился после нескольких нехитрых вычислений из decimal(14,5).

:-)
13 фев 13, 19:00    [13922504]     Ответить | Цитировать Сообщить модератору
 Re: Расчеты с использованием decimal - можете объяснить почему  [new]
.
Guest
да шо вы говорите...
а заполните многоточие своим крутым вычислением и результат в студию представьте
SELECT   SQL_VARIANT_PROPERTY(...,'BaseType') AS 'Base Type',
         SQL_VARIANT_PROPERTY(...,'Precision') AS 'Precision',
         SQL_VARIANT_PROPERTY(...,'Scale') AS 'Scale'
13 фев 13, 19:19    [13922589]     Ответить | Цитировать Сообщить модератору
 Re: Расчеты с использованием decimal - можете объяснить почему  [new]
Павел-П
Member

Откуда:
Сообщений: 234
Ну вот Вам пример как из (19,5) и (14,7) легко получается (38,6). Да и вообще вы посмотрите на формулу приведенную Glory, вы вообще можете получить в зависимости от типа всякие разности :-).

declare @A decimal(19, 5)
declare @B decimal(19, 5)
declare @C decimal(14, 7)
select @A*@B/@C as F1
13 фев 13, 21:17    [13922994]     Ответить | Цитировать Сообщить модератору
 Re: Расчеты с использованием decimal - можете объяснить почему  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Павел-П,

Вот недавно такую же тему обсуждали https://www.sql.ru/forum/actualthread.aspx?tid=1001135
14 фев 13, 09:52    [13924244]     Ответить | Цитировать Сообщить модератору
 Re: Расчеты с использованием decimal - можете объяснить почему  [new]
.
Guest
Павел-П
Ну вот Вам пример как из (19,5) и (14,7) легко получается (38,6).


кагбэ формулы читать умею, и (38,6) меня нисколько не удивляет.
не вижу обещанного (39,9)
14 фев 13, 14:19    [13926307]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить