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

Откуда: ВАО
Сообщений: 4259
привет. есть ли возможность конвертнуть real в decimal(15,6) без потери точности.

т.е. например real мы видим как 100,025. Реал в децимал будет виден как 100,024999 например. потеря составляет 0,000001. промежуточную конвертацию в varchar не предлагать.
5 июн 14, 12:49    [16125381]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008r2. real в decimal  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Вся точность была потеряна при помещении значения в real.
5 июн 14, 13:05    [16125524]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008r2. real в decimal  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
shut-up-and-skate,

если вы видите real как 100,025, а при преобразовании в decimal с достаточным количеством знаков получаете иное, это означает что происходит не потеря точности, а то, что в real хранилось некое приближенное к 100,025 значение и при выводе оно округлялось. real - неточный тип данных. то есть вам нужно дополнительно округлить decimal для достижения того же результата. либо через строку
5 июн 14, 13:06    [16125529]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008r2. real в decimal  [new]
shut-up-and-skate
Member

Откуда: ВАО
Сообщений: 4259
спасибо за ответы мужики. насчет того что хранится реал в приближенном виде это понятно. тогда другой вопрос, как при селекте в студии я вижу то что нужно? ну т.е. делаю селект поля типа real и все нормально он показывает. там алгоритм нужно использовать чтоб увидеть это число таким каким его записали изначально?

з.ы. извеняюсь если непонятно выразился
5 июн 14, 13:09    [16125555]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008r2. real в decimal  [new]
shut-up-and-skate
Member

Откуда: ВАО
Сообщений: 4259
Shakill,

что значит через строку?
5 июн 14, 13:10    [16125561]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008r2. real в decimal  [new]
shut-up-and-skate
Member

Откуда: ВАО
Сообщений: 4259
shut-up-and-skate
Shakill,

что значит через строку?
если про промежуточную конвертацию через варчар то не взлетит. примерно в 1% случаев он возвращает совершенно другое значение с разницей вплоть до 0,05
5 июн 14, 13:11    [16125574]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008r2. real в decimal  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
shut-up-and-skate
спасибо за ответы мужики. насчет того что хранится реал в приближенном виде это понятно. тогда другой вопрос, как при селекте в студии я вижу то что нужно? ну т.е. делаю селект поля типа real и все нормально он показывает. там алгоритм нужно использовать чтоб увидеть это число таким каким его записали изначально?

з.ы. извеняюсь если непонятно выразился
Клиентские утилиты округляют при отображении. Поэтому вы видите более-менее "круглое" значение. Промежуточное преобразование в varchar делает то же самое, кстати.
5 июн 14, 13:12    [16125575]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008r2. real в decimal  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
shut-up-and-skate
shut-up-and-skate
Shakill,

что значит через строку?
если про промежуточную конвертацию через варчар то не взлетит. примерно в 1% случаев он возвращает совершенно другое значение с разницей вплоть до 0,05

попробуйте тогда преобразовывать real в decimal(15, 7) и затем округлять до шестого знака
5 июн 14, 13:14    [16125596]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008r2. real в decimal  [new]
shut-up-and-skate
Member

Откуда: ВАО
Сообщений: 4259
Shakill,

ок. попробую.
5 июн 14, 13:16    [16125611]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008r2. real в decimal  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Shakill
shut-up-and-skate,

если вы видите real как 100,025, а при преобразовании в decimal с достаточным количеством знаков получаете иное, это означает что происходит не потеря точности, а то, что в real хранилось некое приближенное к 100,025 значение и при выводе оно округлялось. real - неточный тип данных. то есть вам нужно дополнительно округлить decimal для достижения того же результата. либо через строку
real - точный тип.
Просто мы на практике никогда не видим его полное истинное значение.
Которое не обязательно равно вставляемому значению с точностью до бита.
5 июн 14, 13:39    [16125788]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008r2. real в decimal  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
iap
real - точный тип.
Просто мы на практике никогда не видим его полное истинное значение.
Которое не обязательно равно вставляемому значению с точностью до бита.
неужели надо уточнять что он неточный применительно к хранению десятичных чисел
5 июн 14, 13:51    [16125907]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008r2. real в decimal  [new]
PaNik
Member

Откуда: Москва
Сообщений: 1143
iap
real - точный тип.
...


Microsoft с вами не согласен
5 июн 14, 13:56    [16125968]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008r2. real в decimal  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
PaNik
iap
real - точный тип.
...


Microsoft с вами не согласен
Начинаем дело "iap против Микрософта"!

Надеюсь на вашу поддержку, друзья!
5 июн 14, 14:05    [16126032]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008r2. real в decimal  [new]
shut-up-and-skate
Member

Откуда: ВАО
Сообщений: 4259
PaNik
iap
real - точный тип.
...


Microsoft с вами не согласен
спасибо что ткнул носом в решение. вот я тупой мужики... делал каст в варчар. а нужно было использовать str. победа.
5 июн 14, 14:10    [16126077]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008r2. real в decimal  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
+ оффтоп
iap
Начинаем дело "iap против Микрософта"!
Надеюсь на вашу поддержку, друзья!

так вы не первый. тут уже есть как минимум люди, несогласные с синтаксисом команды бэкап, несогласные с офф. переводом и т.д. =)
5 июн 14, 14:11    [16126082]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008r2. real в decimal  [new]
shut-up-and-skate
Member

Откуда: ВАО
Сообщений: 4259
shut-up-and-skate
победа.
для кого-то беда что такие спецы как я занимаются разработкой :)
5 июн 14, 14:13    [16126099]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008r2. real в decimal  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
iap
Начинаем дело "iap против Микрософта"!

Надеюсь на вашу поддержку, друзья!

О - давненько не было етой темы float & real VS decimal & numeric
5 июн 14, 14:25    [16126193]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008r2. real в decimal  [new]
shut-up-and-skate
Member

Откуда: ВАО
Сообщений: 4259
обсудите победу.
declare @Value real = 44555.87

select @Value,
    cast(@Value as decimal(15,6)) as ValueDec,
    cast(left(convert(varchar,@Value,1),9) as decimal(15,6)) -- автоокругление до 6 знаков
      *cast(case cast(right(convert(varchar,@Value,1),1) as int)
                when 1 then 10
                when 2 then 100
                when 3 then 1000
                when 4 then 10000
                when 5 then 100000
                when 6 then 1000000
                when 7 then 10000000
                when 8 then 100000000
            end as decimal(15,6)) as ValueDecStrong
5 июн 14, 14:52    [16126425]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008r2. real в decimal  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
round(cast(@Value as decimal(15,6)), 2)
5 июн 14, 15:01    [16126523]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008r2. real в decimal  [new]
Glory
Member

Откуда:
Сообщений: 104751
iap
PaNik
пропущено...


Microsoft с вами не согласен
Начинаем дело "iap против Микрософта"!

Надеюсь на вашу поддержку, друзья!

Просто все как всегда цитируют части определения
А определение нужно читать целиком
"Данные с плавающей запятой являются приблизительными, поэтому не все значения из диапазона могут быть отображены точно. Синониму real соответствует в ISO тип float(24)."
Т.е. данные приблизительные. Но не потому, что они каждый раз разные, а потому что "не все значения могут быть отображены"
Т.е. для тех, кто столкнулся с отображением данных, этот тип данных неточный.
А для тех, кто совершает вычисления, этот тип данных очень даже точный
5 июн 14, 16:14    [16127174]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить