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

Откуда:
Сообщений: 81
Подскажите пожалуйста, есть отличие округления до, например 3 знаков после запятой с помощью round и преобразованием типа к decimal(18, 3) ?

declare @f float
set @f = 1055.28885 / 7

SELECT @f
--150,75555
SELECT ROUND(@f, 3);
--150,756
SELECT cast(@f as decimal(18, 3));
--150,756
24 июн 13, 10:21    [14472216]     Ответить | Цитировать Сообщить модератору
 Re: отличие округления от преобразования  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
SELECT ROUND(@f, 3) r1, cast(@f as decimal(18, 3)) r2
  into test_table

select COLUMN_NAME, DATA_TYPE 
  from INFORMATION_SCHEMA.COLUMNS 
 where table_name = 'test_table'
24 июн 13, 10:28    [14472268]     Ответить | Цитировать Сообщить модератору
 Re: отличие округления от преобразования  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
Nakeshi
Подскажите пожалуйста, есть отличие округления до, например 3 знаков после запятой с помощью round и преобразованием типа к decimal(18, 3) ?

declare @f float
set @f = 1055.28885 / 7

SELECT @f
--150,75555
SELECT ROUND(@f, 3);
--150,756
SELECT cast(@f as decimal(18, 3));
--150,756
SELECT ROUND(@f, 3, 1);

--150.755
24 июн 13, 10:50    [14472440]     Ответить | Цитировать Сообщить модератору
 Re: отличие округления от преобразования  [new]
Nakeshi
Member

Откуда:
Сообщений: 81
Усечение не требуется, и тип не важен.
Корректно ли во всех случаях будет проходить округление, если я воспользуюсь просто преобразованием к decimal(18, 3) ?
24 июн 13, 11:08    [14472606]     Ответить | Цитировать Сообщить модератору
 Re: отличие округления от преобразования  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Nakeshi
Усечение не требуется, и тип не важен.
Корректно ли во всех случаях будет проходить округление, если я воспользуюсь просто преобразованием к decimal(18, 3) ?

вот например
DECLARE @a float = 1.0005, @b float = 1.0015;
SELECT @a, @b
SELECT CAST(@a AS decimal(18, 3)) AS a, CAST(@b AS decimal(18, 3)) AS b; -- a = 1.000, b = 1.002 
24 июн 13, 12:41    [14473402]     Ответить | Цитировать Сообщить модератору
 Re: отличие округления от преобразования  [new]
Nakeshi
Member

Откуда:
Сообщений: 81
да вроде ничем не отличается от
SELECT round(@a, 3) AS a, round(@b, 3) AS b
24 июн 13, 13:23    [14473755]     Ответить | Цитировать Сообщить модератору
 Re: отличие округления от преобразования  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Nakeshi, ну если устраивает, то и хорошо
вообще про действие cast написано в хелпе, когда усекается, а когда округляется.
Функции CAST и CONVERT
float -> numeric
Округление
Точность преобразования значений float, которые используют экспоненциальное представление, к decimal или numeric ограничена только 17 знаками. Любое значение с точностью, превышающей 17 знаков, округляется до нуля.
24 июн 13, 13:33    [14473845]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить