Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > округление данных


Автор: TaNK 23.5.2012, 08:29
Добрый день, возник вопрос на который пока не нашел ответа:
имеем запрос вида

Код

Select Round(sum(volume)*Cena,2),  Cena
From....
where.....
group by Cena


т.е. sum(volume) - имеем 500
Cena - 3.15317

Перемножаем значения и получаем 1576.585 - округляя до 2 знаков должен получить 1576.59, но получаю 1576.58
если же получаю значение 1566.495, округление дает 1566.50

Причем если же выполнить:

Код

Select round(1576.585,2), round(1566.495,2)

Получаю верные значения

Подскажите почему так происходит и как сделать так чтобы округлял по математическим правилам, Спасибо

P.S. SQL SERVER 2005 SP4
Типы данных 
volume - float
Cena   -  decimal (23,9)

Автор: Zioma 23.5.2012, 08:50
Приведите все к одному типу.
Например:
Код

Select Round(cast(sum(volume) as decimal(23,9)) * Cena, 2),  Cena
From....
where.....
group by Cena

Автор: Akina 23.5.2012, 09:05
TaNK, это бухгалтерское округление, половина - к чётному.

Автор: TaNK 23.5.2012, 09:09
Akina, да об этом я где то слышал, приведение к одному типу, как подсказал Zioma помогает, ошибок пока не нашел.

Автор: Zioma 23.5.2012, 09:19
TaNK, 
В T-SQL всегда и всё приводите к одному типу - будет меньше ошибок.

Автор: TaNK 23.5.2012, 10:34
Zioma,  спасибо все получилось!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)