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

Откуда:
Сообщений: 405
Доброго дня!
Подскажите, как можно сделать такое округление:

если >=1.50, то 2,

если же <1.50, то 1.

Заранее спасибо.
11 дек 12, 13:15    [13612129]     Ответить | Цитировать Сообщить модератору
 Re: загадка по округлению  [new]
Glory
Member

Откуда:
Сообщений: 104751
С помощью стандартной функции округления.
11 дек 12, 13:18    [13612165]     Ответить | Цитировать Сообщить модератору
 Re: загадка по округлению  [new]
iap
Member

Откуда: Москва
Сообщений: 47105
temoxa,

Например, ROUND(X,0)
11 дек 12, 13:20    [13612185]     Ответить | Цитировать Сообщить модератору
 Re: загадка по округлению  [new]
temoxa
Member

Откуда:
Сообщений: 405
Всем спасибо! Тема закрытая.
11 дек 12, 13:24    [13612242]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: загадка по округлению  [new]
Округление
Guest
Подниму.

declare @u float
declare @w float
set @u=113.53
set @w=113.54
select round((@u+@w)/2.,2) -- 113.53

Но при этом:
declare @u real
declare @w real
set @u=113.53
set @w=113.54
select round((@u+@w)/2.,2) -- 113.54

а так же
declare @u float
declare @w float
set @u=113.53
set @w=113.54
select round(cast((@u+@w)/2. as real),2) -- 113.54


Почему FLOAT округляется вниз, а REAL по правилам?
23 июл 14, 06:13    [16344541]     Ответить | Цитировать Сообщить модератору
 Re: загадка по округлению  [new]
aleks2
Guest
Data type Range Storage
float
- 1.79E+308 to -2.23E-308, 0 and 2.23E-308 to 1.79E+308
Depends on the value of n

real
- 3.40E + 38 to -1.18E - 38, 0 and 1.18E - 38 to 3.40E + 38
4 Bytes


Syntax
float [ ( n ) ]
Where n is the number of bits that are used to store the mantissa of the float number in scientific notation and, therefore, dictates the precision and storage size. If n is specified, it must be a value between 1 and 53. The default value of n is 53.

Note:
SQL Server 2005 treats n as one of two possible values. If 1<=n<=24, n is treated as 24. If 25<=n<=53, n is treated as 53.

declare @u float(24)
declare @w float(24)
set @u=113.53
set @w=113.54
select round((@u+@w)/2.,2) -- 113.54

Тут любят обвинять float/real в "неточности".
Оне просто не понимают, что 113.53 такое кругленькое и коротенькое в десятичной записи, но в двоичном представлении - длиннее 24 бит.
23 июл 14, 06:42    [16344554]     Ответить | Цитировать Сообщить модератору
 Re: загадка по округлению  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8863
ТС, считай, что это - документированный баг NS SQL.
Посмотри вот сюда (значения чуть изменились, но итог - тотже!):
declare @u float
declare @w float
set @u=113.54
set @w=113.55
select [@u+@w] = @u+@w
 ,[(@u+@w)/2.] = (@u+@w)/2.
 ,[ ROUND((@u+@w)/2., 2)] =  ROUND((@u+@w)/2., 2)
 ,[ ROUND((@u+@w)/2E0, 2E0)] =  ROUND((@u+@w)/2E0, 2E0)
 
 ,[round(cast((@u+@w)/2. as real),2)]= round(cast((@u+@w)/2. as real),2) -- 113.54


PS Не люблю float,- стараюсь использовать numeric (?,?)
23 июл 14, 11:59    [16345773]     Ответить | Цитировать Сообщить модератору
 Re: загадка по округлению  [new]
aleks2
Guest
SIMPLicity_
ТС, считай, что это - документированный баг NS SQL.

PS Не люблю float,- стараюсь использовать numeric (?,?)


Ога, нашел виноватого. Просто ты не умеешь его готовить.

На вот, НЕ SQL

К сообщению приложен файл. Размер - 74Kb
23 июл 14, 14:10    [16346786]     Ответить | Цитировать Сообщить модератору
 Re: загадка по округлению  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8723
При чем здесь SQL или еще что. Это особенности формата хранения числа в приближенном виде.
23 июл 14, 16:22    [16347773]     Ответить | Цитировать Сообщить модератору
 Re: загадка по округлению  [new]
iap
Member

Откуда: Москва
Сообщений: 47105
Владислав Колосов
При чем здесь SQL или еще что. Это особенности формата хранения числа в приближенном виде.
От этого разве легче? :)
23 июл 14, 16:24    [16347784]     Ответить | Цитировать Сообщить модератору
 Re: загадка по округлению  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8723
Предупрежден - значит вооружен :)
Float всегда имеет погрешность хранения, надо это знать...
23 июл 14, 16:28    [16347821]     Ответить | Цитировать Сообщить модератору
 Re: загадка по округлению  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8863
Владислав Колосов
При чем здесь SQL или еще что. Это особенности формата хранения числа в приближенном виде.

+1

Но от этого, согласен, realьно, не легче... ;-(
23 июл 14, 19:32    [16348637]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить