Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: float, numeric  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Mnior, спасибо, не ожидал...
select SUM(fl)s_float, SUM(mn)s_money, SUM(ROUND(fl,2))s_round
from (
   select Convert(Float,0),Convert(Money,0)
   union all
   SELECT top(100000) 100000.01, 100000.01 FROM 
      master.dbo.spt_values A, 
      master.dbo.spt_values B
   )t(fl,mn)
s_floats_moneys_round
10000001000.017810000001000.000010000001000.0178
28 июн 13, 13:07    [14496958]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3618
Mnior
alexeyvg
округление при выводе результата, больше ни чему неприятному эта неточность типа не приводит.
Как же, банальная сумма, чем больше элементов - тем больше погрешность, и бац, копейка куда-то делась. Разве нет?
SELECT	 Convert(Money,Sum(Convert(Float,0.01) + Convert(Float,100000)))
	,              Sum(Convert(Money,0.01) + Convert(Money,100000))
FROM	master.dbo.spt_values	A CROSS JOIN
	master.dbo.spt_values	B
FloatMoney
632522563252.211632522563252.25

дык и нумериками такая же беда...

declare @num1 numeric(38,10) 
declare @num2 numeric(38,10) 
set @num1 = .0000006 
set @num2 = 1.0 
select cast( @num1 * @num2 as numeric(38,10))
Дает: .0000010000
Вместо: .0000006000
28 июн 13, 13:07    [14496961]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
Testor1
Member

Откуда:
Сообщений: 679
iap
Testor1
iap,


Люди добрые :) Скажите как вы большие проекты пишите? :) не хочу теории. Напишите кто и какой тип использует при подобных задачах.

Я склоняюсь к использованию SMALLMONEY, но не знаю есть ли у него какие-то нюансы, которые неочевидные, но их надо знать.
Кто подскажет ?
Разве я не написал уже два раза?!

MONEY!!


А нюансы есть ? не ответил :)
28 июн 13, 13:09    [14496971]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Testor1
Скажите как вы большие проекты пишите? :) не хочу теории.
Уволен!!!
iap
А разве перед умножением типы не приводятся к одному с наибольшим приоритетом?
http://msdn.microsoft.com/ru-ru/library/ms190309(v=sql.110).aspx
Смотрю в таблицу по ссылке, и вдруг вижу: а NUMERIC-то там и нет!! Как же так?
(Decaimal же)

Тип то меняется, но вот как?
alexeyvg же выше сослался. Точность, масштаб и длина:
BOL
Тип данных int имеет точность 10, длину 4 и масштаб 0

ОперацияТочность результатаМасштаб результата *
e1 + e2max(s1, s2) + max(p1-s1, p2-s2) + 1max(s1, s2)
e1 - e2max(s1, s2) + max(p1-s1, p2-s2) + 1max(s1, s2)
e1 * e2p1 + p2 + 1s1 + s2
e1 / e2p1 - s1 + s2 + max(6, s1 + p2 + 1)max(6, s1 + p2 + 1)
e1 { UNION | EXCEPT | INTERSECT } e2max(s1, s2) + max(p1-s1, p2-s2)max(s1, s2)
e1 % e2min(p1-s1, p2 -s2) + max( s1,s2 )max(s1, s2)
Подставляя в формулы получаем очень простые вещи на практике.

А так, да, ещё проще для понимания, money оно и в Африке money. :)
28 июн 13, 13:17    [14497004]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Ivan Durak
дык и нумериками такая же беда...
Это когда + стал эквивалентен *?
Вы то тему читали?

Нет там никакой бяды.
SELECT	 Convert(Money,Sum(Convert(Float         ,0.01) + Convert(Float         ,100000)))
	,              Sum(Convert(Decimal(38,10),0.01) + Convert(Decimal(38,10),100000))
	,              Sum(Convert(Money         ,0.01) + Convert(Money         ,100000))
FROM	master.dbo.spt_values	A CROSS JOIN
	master.dbo.spt_values	B
FloatDecimalMoney
632522563252.211632522563252.2500000000632522563252.25
28 июн 13, 13:21    [14497021]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
Testor1
Member

Откуда:
Сообщений: 679
Mnior
Testor1
Скажите как вы большие проекты пишите? :) не хочу теории.
Уволен!!!
iap
А разве перед умножением типы не приводятся к одному с наибольшим приоритетом?
http://msdn.microsoft.com/ru-ru/library/ms190309(v=sql.110).aspx
Смотрю в таблицу по ссылке, и вдруг вижу: а NUMERIC-то там и нет!! Как же так?
(Decaimal же)

Тип то меняется, но вот как?
alexeyvg же выше сослался. Точность, масштаб и длина:
BOL
Тип данных int имеет точность 10, длину 4 и масштаб 0

ОперацияТочность результатаМасштаб результата *
e1 + e2max(s1, s2) + max(p1-s1, p2-s2) + 1max(s1, s2)
e1 - e2max(s1, s2) + max(p1-s1, p2-s2) + 1max(s1, s2)
e1 * e2p1 + p2 + 1s1 + s2
e1 / e2p1 - s1 + s2 + max(6, s1 + p2 + 1)max(6, s1 + p2 + 1)
e1 { UNION | EXCEPT | INTERSECT } e2max(s1, s2) + max(p1-s1, p2-s2)max(s1, s2)
e1 % e2min(p1-s1, p2 -s2) + max( s1,s2 )max(s1, s2)
Подставляя в формулы получаем очень простые вещи на практике.

А так, да, ещё проще для понимания, money оно и в Африке money. :)



Плиз ответь по существу. Понимаю, что вы люди с опытом :)
У Money, нет таких же проблем как и у NUMERIC ?
MONEY это не есть тоже NUMERIC но с фиксированой точностью ? Если да, то те же проблемы :(
28 июн 13, 13:22    [14497027]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Mnior
iap
А разве перед умножением типы не приводятся к одному с наибольшим приоритетом?
http://msdn.microsoft.com/ru-ru/library/ms190309(v=sql.110).aspx
Смотрю в таблицу по ссылке, и вдруг вижу: а NUMERIC-то там и нет!! Как же так?
(Decaimal же)
Строго говоря, DEC и NUMERIC - разные типы.
Где-то тут мы тонкости обсуждали.
Но искать долго...
28 июн 13, 13:27    [14497053]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Testor1
У Money, нет таких же проблем как и у NUMERIC ?
У NUMERIC нет проблем.
И да, Money стоит отдельно в типах, поэтому там формула не работает:
DECLARE	 @A Decimal(19,9)	= 1.123
	,@B Decimal(14,7)	= 1.5
	,@X Money		= 1.123
	,@Y Money		= 1.5
SELECT	 @A/@B	AS Decimal
	,@X/@Y	AS Money
DecimalMoney
0.7486666666666666666660.7486
Считать это преимуществом? Можно, но повторяю - деления (умножения) таких типов меж собой - исключения из правил.
iap
Строго говоря, DEC и NUMERIC - разные типы.
Где-то тут мы тонкости обсуждали.
Но искать долго...
Не верю. ©
28 июн 13, 14:00    [14497269]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
Testor1
Member

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

Money подходит
Спасибо.
28 июн 13, 14:13    [14497365]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
iap
Mnior
пропущено...
(Decaimal же)
Строго говоря, DEC и NUMERIC - разные типы.
Где-то тут мы тонкости обсуждали.
Но искать долго...


да вроде пришли к выводу, что одинаковые 8700205
28 июн 13, 14:14    [14497371]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
А нельзя на этапе проектирования бд ВСЕ поля где будут дробные сделать одинаковой размерности и точности? И забыть о особенностях пермножения /делении нумериков вообще на года вперед?
28 июн 13, 14:19    [14497408]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Shakill
iap
пропущено...
Строго говоря, DEC и NUMERIC - разные типы.
Где-то тут мы тонкости обсуждали.
Но искать долго...


да вроде пришли к выводу, что одинаковые 8700205
О! Спасибо!
Но пришли к выводу, что Microsoft ПОКА сделал их одинаковыми,
а в стандарте-то есть нюансы.

Кстати, Testor1, а ведь полезно почитать тему по ссылке.
И там ссылки даются - по ним сходить.
28 июн 13, 14:27    [14497464]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
iap
Shakill
пропущено...


да вроде пришли к выводу, что одинаковые 8700205
О! Спасибо!
Но пришли к выводу, что Microsoft ПОКА сделал их одинаковыми,
а в стандарте-то есть нюансы.

Кстати, Testor1, а ведь полезно почитать тему по ссылке.
И там ссылки даются - по ним сходить.
Кстати, там и Mnior не раз отметился!
Но сегодня вдруг не верит!
28 июн 13, 14:29    [14497471]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
iap
Кстати, там и Mnior не раз отметился!
Но сегодня вдруг не верит!
Ну я почитал того мниора, чё-то не видно что он читал ту заметку.
Ну он тоже человек, и тоже может читать по диагонали :) да и 3 года прошло, Mnior уже не тот.
Да и не понял смысла разницы, для чего.

Cammomile
А нельзя на этапе проектирования бд ВСЕ поля где будут дробные сделать одинаковой размерности и точности? И забыть о особенностях пермножения /делении нумериков вообще на года вперед?
Кхм, а вы хоть читаете что тут пишут?
DECLARE	 @D Decimal(20,4)	= 1.123
	,@M Money		= 1.123
SELECT	 Sql_Variant_Property(@D*@D,'Scale'),Sql_Variant_Property(@D/@D,'Scale')
	,Sql_Variant_Property(@M*@M,'Scale'),Sql_Variant_Property(@M/@M,'Scale')
TypeScaleMultipleScaleDivide
Decimal618
Money44
28 июн 13, 15:28    [14497921]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
Testor1
Member

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


да вроде пришли к выводу, что одинаковые 8700205
О! Спасибо!
Но пришли к выводу, что Microsoft ПОКА сделал их одинаковыми,
а в стандарте-то есть нюансы.

Кстати, Testor1, а ведь полезно почитать тему по ссылке.
И там ссылки даются - по ним сходить.


Жесть :( первый же пример. Что то припоминаю, что я с тем же столкнулся :( в реале. Долго пытался понять в чем дело :(

Короче чем дальше в лес, тем страшнее волки.
Окончательно запутаешься с выбором и в такой на вид простой задаче. Как там банки живут? Что они выбирают?
Уже хочется свой CLR писать для этого всего :(

http://adamhutson.com/2009/11/20/money-vs-decimal-data-types-in-sql-server/
28 июн 13, 22:09    [14499400]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
Testor1
Member

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

Как итог из статьи - What did we learn, … Don’t use the MONEY datatype in SQL Server.

Какое-то садомазо получается для программеров
28 июн 13, 22:13    [14499412]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
Mnior
Как же, банальная сумма, чем больше элементов - тем больше погрешность, и бац, копейка куда-то делась. Разве нет?
Да, точно, был неправ... И round не помогает, даже как то странно...
28 июн 13, 22:55    [14499541]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
alexeyvg
Да, точно, был неправ... И round не помогает, даже как то странно...
Перелогиньтесь, явно на alexeyvg никак не смахиваете. ;)
29 июн 13, 03:09    [14500070]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3618
Testor1
Окончательно запутаешься с выбором и в такой на вид простой задаче. Как там банки живут? Что они выбирают?

да кто как. Лично видел в банке процедуру которая регулярно сама ходит по данным, ищет расхождения на копейки и сама подправляет итоговые суммы!!!
Так и живут :)
1 июл 13, 11:42    [14504055]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Ivan Durak
Лично видел в банке процедуру которая регулярно сама ходит по данным, ищет расхождения на копейки и сама подправляет итоговые суммы!!!
Чё вы ужастики рассказываете то.
А вообще есть такое, но связано совсем не с долбаным float.

Testor1
Don’t use the MONEY datatype in SQL Server.
Не читайте советских газет. ©

Testor1, чё, тяжело быть гуманитарием в программировании.
Если видите что это "не ваше" - меняйте вид деятельности.
А вообще в IT немного не хватает гуманитариев, но только не части программировании. Точнее хватает, но они не на своих местах.
IMXO
1 июл 13, 12:52    [14504604]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
baracs
Member

Откуда: Москва
Сообщений: 7204
Testor1
Окончательно запутаешься с выбором и в такой на вид простой задаче. Как там банки живут? Что они выбирают?
За все банки не скажу, но тот, с которым пришлось иметь дело, вполне счастливо живет с MONEY...
1 июл 13, 12:57    [14504633]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3618
Mnior
А вообще есть такое, но связано совсем не с долбаным float.

ну в обшем да, конечно. Поэтому тут с большего побарабану тип...
но чаще всего в банках видел нумерики или моней...... но флоаты тоже встречал
1 июл 13, 13:40    [14504944]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
мимо
Guest
Testor1,
Формат не интересен. Интересно что со всем этим делать? Надо ли подбивать баланс?
Например: три работника заработали вместе 1 руб., выполнив одинаковое кол-во работы с одинаковой оплатой. Т.е. сколько каждому начислить, записать в БД (и что писать) чтоб потом суммировать в рубль?
Ни мoney, ни decimal сами по себе не помогут. Нужна методика.
1 июл 13, 13:57    [14505097]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34621
Testor1
Всем привет !

Посоветуйте какой тип использовать для финансовых операций - NUMERIC или Float или Money ?
Меня напрягают нюансы с округлением и особенностями умножений NUMERIC. :(


Смотря какие финансовые операции. Статистика -- может использовать float/double.
1 июл 13, 13:59    [14505117]     Ответить | Цитировать Сообщить модератору
 Re: float, numeric  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3618
мимо
Нужна методика.

так я писал же:
Ivan Durak
Лично видел в банке процедуру которая регулярно сама ходит по данным, ищет расхождения на копейки и сама подправляет итоговые суммы!!!
1 июл 13, 16:06    [14505929]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить