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

Откуда:
Сообщений: 63
Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)   Oct 14 2005 00:33:37   Copyright (c) 1988-2005 Microsoft Corporation  Enterprise Evaluation Edition on Windows NT 6.0 (Build 6001: Service Pack 1) 
declare @a float, @b float
set @a=1.47
set @b=51.5
select round(@a*@b,2)
результат
75.7
select round(1.47*51.5,2)
результат
75.710

в чем отличие? )
14 сен 09, 09:36    [7653639]     Ответить | Цитировать Сообщить модератору
 Re: ROUND  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
А здесь в чем отличие?

declare @a float, @b float
set @a=1.47
set @b=51.5
select round(@a*@b,2)

GO

declare @a money, @b money;
set @a=1.47
set @b=51.5
select round(@a*@b,2)


Сообщение было отредактировано: 14 сен 09, 09:40
14 сен 09, 09:40    [7653655]     Ответить | Цитировать Сообщить модератору
 Re: ROUND  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
Первое:

Использование типов данных float и real
Типы данных float и real называются приблизительными типами данных. Поведение float и real соответствует спецификации IEEE 754 для приблизительных числовых типов данных.

Приблизительные числовые типы данных не хранят точных значений, заданных для многих чисел. Вместо этого они хранят очень хорошее приближение для этих значений. Для многих приложений различие между заданным значением и хранимым приближением несущественно. Однако в некоторых случаях это различие становится ощутимым. По причине приблизительной природы типов данных float и real не используйте их, если требуется точность хранения значений. Например, в финансовых приложениях, в операциях, связанных с округлением, или в проверках на точное равенство. Вместо этого используйте целые типы данных, decimal, money или smallmoney.

Избегайте использования столбцов float или real в предложении WHERE, особенно при использовании логических операторов = и <>. Рекомендуется ограничить использование столбцов float и real операциями сравнения > или <.

Спецификация IEEE 754 обеспечивает четыре режима округления: округление к ближайшему, округление вверх, округление вниз и округление к нулю. Microsoft SQL Server 2005 использует округление вверх. Все эти режимы гарантируют точность представления, но дают слегка отличающиеся результаты для значений с плавающей точкой. Так как двоичное представление числа с плавающей точкой может использовать множество допустимых схем округления, то это приводит к невозможности точного задания значения с плавающей точкой.


Второе:

использовать голый сервер без SP - моветон...
14 сен 09, 09:44    [7653667]     Ответить | Цитировать Сообщить модератору
 Re: ROUND  [new]
Tohins
Member

Откуда:
Сообщений: 63
тип float - банковское округление
money - математическое?
14 сен 09, 09:46    [7653671]     Ответить | Цитировать Сообщить модератору
 Re: ROUND  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Tohins
тип float - банковское округление
money - математическое?
Вам уже здесь всё про неточные типы данных рассказали.
14 сен 09, 09:47    [7653677]     Ответить | Цитировать Сообщить модератору
 Re: ROUND  [new]
Tohins
Member

Откуда:
Сообщений: 63
спасиба.
14 сен 09, 09:48    [7653680]     Ответить | Цитировать Сообщить модератору
 Re: ROUND  [new]
Tohins
Member

Откуда:
Сообщений: 63
а как вам такой вариант?

declare @a float, @b float
set @a=21.932741
set @b=25.2
select round(@a*@b,2)

GO

declare @a money, @b money;
set @a=21.932741
set @b=25.2
select round(@a*@b,2)
15 сен 09, 02:34    [7658423]     Ответить | Цитировать Сообщить модератору
 Re: ROUND  [new]
Нектотам
Guest
Tohins
а как вам такой вариант?
declare @a money, @b money;
set @a=21.932741
set @b=25.2
select round(@a*@b,2)

BOL

Типы данных money и smallmoney имеют точность до одной десятитысячной денежной единицы, которую они представляют.

21.932741 обрезается до 21.9327
15 сен 09, 05:48    [7658479]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить