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

Откуда:
Сообщений: 157
День добры.
В хранимой процедуре есть переменные типа NUMERIC(19, 8). Выполняю разные математические операци и в результате получаю странные, для меня, числа. В приведено примере V5 то 0,0000001 а должно быть 0,00000013. Как вообще правильно считать столь мылые сичла, может испоьзовать другой тип данных?

WITH cte
AS
(SELECT CAST(1.00000000 AS NUMERIC(19, 8)) AS v1,
        CAST(0.00010000 AS NUMERIC(19, 8)) AS v2,
        CAST(714.81428570 AS NUMERIC(19, 8)) AS v3)
SELECT v1,
       v2,
       v3,
       (v2 / v3) AS v4,
       v1 * (v2 / v3) AS v5
  FROM cte
9 авг 17, 18:15    [20711696]     Ответить | Цитировать Сообщить модератору
 Re: Округления  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36928
Потому что precision и scale для результата деления или умножения numeric вычисляется по определенной формуле: https://docs.microsoft.com/en-us/sql/t-sql/data-types/precision-scale-and-length-transact-sql
9 авг 17, 18:22    [20711715]     Ответить | Цитировать Сообщить модератору
 Re: Округления  [new]
Владислав Колосов
Member

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

лучше real или float в такой ситуации.
9 авг 17, 18:53    [20711792]     Ответить | Цитировать Сообщить модератору
 Re: Округления  [new]
mezzanine
Member

Откуда:
Сообщений: 157
Владислав Колосов,

Спасибо, тип Float действительно помог. Считает согласно с законами моей реальности :) Буду конверитровать на Float то что храниться в таблицах, по вычислениях cast и в таблицу.
9 авг 17, 21:54    [20712079]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить